﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SpiceNet.Diagnostics;
using SpiceNet.Circuits;
using SpiceNet.Models.BSIM3p;
using SpiceNet.Parameters;

namespace SpiceNet.Models
{
    /// <summary>
    /// A BSIM 3.2.4 Mosfet model
    /// </summary>
    public class BSIM3v24Model : Model
    {
        /// <summary>
        /// Get parameters
        /// </summary>
        public override Dictionary<string, Parameterized.IP> ParamTable
        {
            get { return _pTable; }
        }

        /// <summary>
        /// Internally calculated variables
        /// </summary>
        public Dictionary<Tuple<double, double>, SizeDependParam> Params = new Dictionary<Tuple<double, double>, SizeDependParam>();

        #region Parameters
        private enum _c
        {
            /* model parameters */
            BSIM3_MOD_CAPMOD = 101,
            BSIM3_MOD_MOBMOD = 103,
            BSIM3_MOD_NOIMOD = 104,
            BSIM3_MOD_TOX = 105,
            BSIM3_MOD_CDSC = 106,
            BSIM3_MOD_CDSCB = 107,
            BSIM3_MOD_CIT = 108,
            BSIM3_MOD_NFACTOR = 109,
            BSIM3_MOD_XJ = 110,
            BSIM3_MOD_VSAT = 111,
            BSIM3_MOD_AT = 112,
            BSIM3_MOD_A0 = 113,
            BSIM3_MOD_A1 = 114,
            BSIM3_MOD_A2 = 115,
            BSIM3_MOD_KETA = 116,
            BSIM3_MOD_NSUB = 117,
            BSIM3_MOD_NPEAK = 118,
            BSIM3_MOD_NGATE = 120,
            BSIM3_MOD_GAMMA1 = 121,
            BSIM3_MOD_GAMMA2 = 122,
            BSIM3_MOD_VBX = 123,
            BSIM3_MOD_BINUNIT = 124,
            BSIM3_MOD_VBM = 125,
            BSIM3_MOD_XT = 126,
            BSIM3_MOD_K1 = 129,
            BSIM3_MOD_KT1 = 130,
            BSIM3_MOD_KT1L = 131,
            BSIM3_MOD_K2 = 132,
            BSIM3_MOD_KT2 = 133,
            BSIM3_MOD_K3 = 134,
            BSIM3_MOD_K3B = 135,
            BSIM3_MOD_W0 = 136,
            BSIM3_MOD_NLX = 137,
            BSIM3_MOD_DVT0 = 138,
            BSIM3_MOD_DVT1 = 139,
            BSIM3_MOD_DVT2 = 140,
            BSIM3_MOD_DVT0W = 141,
            BSIM3_MOD_DVT1W = 142,
            BSIM3_MOD_DVT2W = 143,
            BSIM3_MOD_DROUT = 144,
            BSIM3_MOD_DSUB = 145,
            BSIM3_MOD_VTH0 = 146,
            BSIM3_MOD_UA = 147,
            BSIM3_MOD_UA1 = 148,
            BSIM3_MOD_UB = 149,
            BSIM3_MOD_UB1 = 150,
            BSIM3_MOD_UC = 151,
            BSIM3_MOD_UC1 = 152,
            BSIM3_MOD_U0 = 153,
            BSIM3_MOD_UTE = 154,
            BSIM3_MOD_VOFF = 155,
            BSIM3_MOD_DELTA = 156,
            BSIM3_MOD_RDSW = 157,
            BSIM3_MOD_PRT = 158,
            BSIM3_MOD_LDD = 159,
            BSIM3_MOD_ETA = 160,
            BSIM3_MOD_ETA0 = 161,
            BSIM3_MOD_ETAB = 162,
            BSIM3_MOD_PCLM = 163,
            BSIM3_MOD_PDIBL1 = 164,
            BSIM3_MOD_PDIBL2 = 165,
            BSIM3_MOD_PSCBE1 = 166,
            BSIM3_MOD_PSCBE2 = 167,
            BSIM3_MOD_PVAG = 168,
            BSIM3_MOD_WR = 169,
            BSIM3_MOD_DWG = 170,
            BSIM3_MOD_DWB = 171,
            BSIM3_MOD_B0 = 172,
            BSIM3_MOD_B1 = 173,
            BSIM3_MOD_ALPHA0 = 174,
            BSIM3_MOD_BETA0 = 175,
            BSIM3_MOD_PDIBLB = 178,
            BSIM3_MOD_PRWG = 179,
            BSIM3_MOD_PRWB = 180,
            BSIM3_MOD_CDSCD = 181,
            BSIM3_MOD_AGS = 182,
            BSIM3_MOD_FRINGE = 184,
            BSIM3_MOD_ELM = 185,
            BSIM3_MOD_CGSL = 186,
            BSIM3_MOD_CGDL = 187,
            BSIM3_MOD_CKAPPA = 188,
            BSIM3_MOD_CF = 189,
            BSIM3_MOD_CLC = 190,
            BSIM3_MOD_CLE = 191,
            BSIM3_MOD_PARAMCHK = 192,
            BSIM3_MOD_VERSION = 193,
            BSIM3_MOD_VFBCV = 194,
            BSIM3_MOD_ACDE = 195,
            BSIM3_MOD_MOIN = 196,
            BSIM3_MOD_NOFF = 197,
            BSIM3_MOD_IJTH = 198,
            BSIM3_MOD_ALPHA1 = 199,
            BSIM3_MOD_VFB = 200,
            BSIM3_MOD_TOXM = 201,
            BSIM3_MOD_TCJ = 202,
            BSIM3_MOD_TCJSW = 203,
            BSIM3_MOD_TCJSWG = 204,
            BSIM3_MOD_TPB = 205,
            BSIM3_MOD_TPBSW = 206,
            BSIM3_MOD_TPBSWG = 207,
            BSIM3_MOD_VOFFCV = 208,

            /* Length dependence */
            BSIM3_MOD_LCDSC = 251,
            BSIM3_MOD_LCDSCB = 252,
            BSIM3_MOD_LCIT = 253,
            BSIM3_MOD_LNFACTOR = 254,
            BSIM3_MOD_LXJ = 255,
            BSIM3_MOD_LVSAT = 256,
            BSIM3_MOD_LAT = 257,
            BSIM3_MOD_LA0 = 258,
            BSIM3_MOD_LA1 = 259,
            BSIM3_MOD_LA2 = 260,
            BSIM3_MOD_LKETA = 261,
            BSIM3_MOD_LNSUB = 262,
            BSIM3_MOD_LNPEAK = 263,
            BSIM3_MOD_LNGATE = 265,
            BSIM3_MOD_LGAMMA1 = 266,
            BSIM3_MOD_LGAMMA2 = 267,
            BSIM3_MOD_LVBX = 268,
            BSIM3_MOD_LVBM = 270,
            BSIM3_MOD_LXT = 272,
            BSIM3_MOD_LK1 = 275,
            BSIM3_MOD_LKT1 = 276,
            BSIM3_MOD_LKT1L = 277,
            BSIM3_MOD_LK2 = 278,
            BSIM3_MOD_LKT2 = 279,
            BSIM3_MOD_LK3 = 280,
            BSIM3_MOD_LK3B = 281,
            BSIM3_MOD_LW0 = 282,
            BSIM3_MOD_LNLX = 283,
            BSIM3_MOD_LDVT0 = 284,
            BSIM3_MOD_LDVT1 = 285,
            BSIM3_MOD_LDVT2 = 286,
            BSIM3_MOD_LDVT0W = 287,
            BSIM3_MOD_LDVT1W = 288,
            BSIM3_MOD_LDVT2W = 289,
            BSIM3_MOD_LDROUT = 290,
            BSIM3_MOD_LDSUB = 291,
            BSIM3_MOD_LVTH0 = 292,
            BSIM3_MOD_LUA = 293,
            BSIM3_MOD_LUA1 = 294,
            BSIM3_MOD_LUB = 295,
            BSIM3_MOD_LUB1 = 296,
            BSIM3_MOD_LUC = 297,
            BSIM3_MOD_LUC1 = 298,
            BSIM3_MOD_LU0 = 299,
            BSIM3_MOD_LUTE = 300,
            BSIM3_MOD_LVOFF = 301,
            BSIM3_MOD_LDELTA = 302,
            BSIM3_MOD_LRDSW = 303,
            BSIM3_MOD_LPRT = 304,
            BSIM3_MOD_LLDD = 305,
            BSIM3_MOD_LETA = 306,
            BSIM3_MOD_LETA0 = 307,
            BSIM3_MOD_LETAB = 308,
            BSIM3_MOD_LPCLM = 309,
            BSIM3_MOD_LPDIBL1 = 310,
            BSIM3_MOD_LPDIBL2 = 311,
            BSIM3_MOD_LPSCBE1 = 312,
            BSIM3_MOD_LPSCBE2 = 313,
            BSIM3_MOD_LPVAG = 314,
            BSIM3_MOD_LWR = 315,
            BSIM3_MOD_LDWG = 316,
            BSIM3_MOD_LDWB = 317,
            BSIM3_MOD_LB0 = 318,
            BSIM3_MOD_LB1 = 319,
            BSIM3_MOD_LALPHA0 = 320,
            BSIM3_MOD_LBETA0 = 321,
            BSIM3_MOD_LPDIBLB = 324,
            BSIM3_MOD_LPRWG = 325,
            BSIM3_MOD_LPRWB = 326,
            BSIM3_MOD_LCDSCD = 327,
            BSIM3_MOD_LAGS = 328,
            BSIM3_MOD_LFRINGE = 331,
            BSIM3_MOD_LELM = 332,
            BSIM3_MOD_LCGSL = 333,
            BSIM3_MOD_LCGDL = 334,
            BSIM3_MOD_LCKAPPA = 335,
            BSIM3_MOD_LCF = 336,
            BSIM3_MOD_LCLC = 337,
            BSIM3_MOD_LCLE = 338,
            BSIM3_MOD_LVFBCV = 339,
            BSIM3_MOD_LACDE = 340,
            BSIM3_MOD_LMOIN = 341,
            BSIM3_MOD_LNOFF = 342,
            BSIM3_MOD_LALPHA1 = 344,
            BSIM3_MOD_LVFB = 345,
            BSIM3_MOD_LVOFFCV = 346,

            /* Width dependence */
            BSIM3_MOD_WCDSC = 381,
            BSIM3_MOD_WCDSCB = 382,
            BSIM3_MOD_WCIT = 383,
            BSIM3_MOD_WNFACTOR = 384,
            BSIM3_MOD_WXJ = 385,
            BSIM3_MOD_WVSAT = 386,
            BSIM3_MOD_WAT = 387,
            BSIM3_MOD_WA0 = 388,
            BSIM3_MOD_WA1 = 389,
            BSIM3_MOD_WA2 = 390,
            BSIM3_MOD_WKETA = 391,
            BSIM3_MOD_WNSUB = 392,
            BSIM3_MOD_WNPEAK = 393,
            BSIM3_MOD_WNGATE = 395,
            BSIM3_MOD_WGAMMA1 = 396,
            BSIM3_MOD_WGAMMA2 = 397,
            BSIM3_MOD_WVBX = 398,
            BSIM3_MOD_WVBM = 400,
            BSIM3_MOD_WXT = 402,
            BSIM3_MOD_WK1 = 405,
            BSIM3_MOD_WKT1 = 406,
            BSIM3_MOD_WKT1L = 407,
            BSIM3_MOD_WK2 = 408,
            BSIM3_MOD_WKT2 = 409,
            BSIM3_MOD_WK3 = 410,
            BSIM3_MOD_WK3B = 411,
            BSIM3_MOD_WW0 = 412,
            BSIM3_MOD_WNLX = 413,
            BSIM3_MOD_WDVT0 = 414,
            BSIM3_MOD_WDVT1 = 415,
            BSIM3_MOD_WDVT2 = 416,
            BSIM3_MOD_WDVT0W = 417,
            BSIM3_MOD_WDVT1W = 418,
            BSIM3_MOD_WDVT2W = 419,
            BSIM3_MOD_WDROUT = 420,
            BSIM3_MOD_WDSUB = 421,
            BSIM3_MOD_WVTH0 = 422,
            BSIM3_MOD_WUA = 423,
            BSIM3_MOD_WUA1 = 424,
            BSIM3_MOD_WUB = 425,
            BSIM3_MOD_WUB1 = 426,
            BSIM3_MOD_WUC = 427,
            BSIM3_MOD_WUC1 = 428,
            BSIM3_MOD_WU0 = 429,
            BSIM3_MOD_WUTE = 430,
            BSIM3_MOD_WVOFF = 431,
            BSIM3_MOD_WDELTA = 432,
            BSIM3_MOD_WRDSW = 433,
            BSIM3_MOD_WPRT = 434,
            BSIM3_MOD_WLDD = 435,
            BSIM3_MOD_WETA = 436,
            BSIM3_MOD_WETA0 = 437,
            BSIM3_MOD_WETAB = 438,
            BSIM3_MOD_WPCLM = 439,
            BSIM3_MOD_WPDIBL1 = 440,
            BSIM3_MOD_WPDIBL2 = 441,
            BSIM3_MOD_WPSCBE1 = 442,
            BSIM3_MOD_WPSCBE2 = 443,
            BSIM3_MOD_WPVAG = 444,
            BSIM3_MOD_WWR = 445,
            BSIM3_MOD_WDWG = 446,
            BSIM3_MOD_WDWB = 447,
            BSIM3_MOD_WB0 = 448,
            BSIM3_MOD_WB1 = 449,
            BSIM3_MOD_WALPHA0 = 450,
            BSIM3_MOD_WBETA0 = 451,
            BSIM3_MOD_WPDIBLB = 454,
            BSIM3_MOD_WPRWG = 455,
            BSIM3_MOD_WPRWB = 456,
            BSIM3_MOD_WCDSCD = 457,
            BSIM3_MOD_WAGS = 458,
            BSIM3_MOD_WFRINGE = 461,
            BSIM3_MOD_WELM = 462,
            BSIM3_MOD_WCGSL = 463,
            BSIM3_MOD_WCGDL = 464,
            BSIM3_MOD_WCKAPPA = 465,
            BSIM3_MOD_WCF = 466,
            BSIM3_MOD_WCLC = 467,
            BSIM3_MOD_WCLE = 468,
            BSIM3_MOD_WVFBCV = 469,
            BSIM3_MOD_WACDE = 470,
            BSIM3_MOD_WMOIN = 471,
            BSIM3_MOD_WNOFF = 472,
            BSIM3_MOD_WALPHA1 = 474,
            BSIM3_MOD_WVFB = 475,
            BSIM3_MOD_WVOFFCV = 476,

            /* Cross-term dependence */
            BSIM3_MOD_PCDSC = 511,
            BSIM3_MOD_PCDSCB = 512,
            BSIM3_MOD_PCIT = 513,
            BSIM3_MOD_PNFACTOR = 514,
            BSIM3_MOD_PXJ = 515,
            BSIM3_MOD_PVSAT = 516,
            BSIM3_MOD_PAT = 517,
            BSIM3_MOD_PA0 = 518,
            BSIM3_MOD_PA1 = 519,
            BSIM3_MOD_PA2 = 520,
            BSIM3_MOD_PKETA = 521,
            BSIM3_MOD_PNSUB = 522,
            BSIM3_MOD_PNPEAK = 523,
            BSIM3_MOD_PNGATE = 525,
            BSIM3_MOD_PGAMMA1 = 526,
            BSIM3_MOD_PGAMMA2 = 527,
            BSIM3_MOD_PVBX = 528,
            BSIM3_MOD_PVBM = 530,
            BSIM3_MOD_PXT = 532,
            BSIM3_MOD_PK1 = 535,
            BSIM3_MOD_PKT1 = 536,
            BSIM3_MOD_PKT1L = 537,
            BSIM3_MOD_PK2 = 538,
            BSIM3_MOD_PKT2 = 539,
            BSIM3_MOD_PK3 = 540,
            BSIM3_MOD_PK3B = 541,
            BSIM3_MOD_PW0 = 542,
            BSIM3_MOD_PNLX = 543,
            BSIM3_MOD_PDVT0 = 544,
            BSIM3_MOD_PDVT1 = 545,
            BSIM3_MOD_PDVT2 = 546,
            BSIM3_MOD_PDVT0W = 547,
            BSIM3_MOD_PDVT1W = 548,
            BSIM3_MOD_PDVT2W = 549,
            BSIM3_MOD_PDROUT = 550,
            BSIM3_MOD_PDSUB = 551,
            BSIM3_MOD_PVTH0 = 552,
            BSIM3_MOD_PUA = 553,
            BSIM3_MOD_PUA1 = 554,
            BSIM3_MOD_PUB = 555,
            BSIM3_MOD_PUB1 = 556,
            BSIM3_MOD_PUC = 557,
            BSIM3_MOD_PUC1 = 558,
            BSIM3_MOD_PU0 = 559,
            BSIM3_MOD_PUTE = 560,
            BSIM3_MOD_PVOFF = 561,
            BSIM3_MOD_PDELTA = 562,
            BSIM3_MOD_PRDSW = 563,
            BSIM3_MOD_PPRT = 564,
            BSIM3_MOD_PLDD = 565,
            BSIM3_MOD_PETA = 566,
            BSIM3_MOD_PETA0 = 567,
            BSIM3_MOD_PETAB = 568,
            BSIM3_MOD_PPCLM = 569,
            BSIM3_MOD_PPDIBL1 = 570,
            BSIM3_MOD_PPDIBL2 = 571,
            BSIM3_MOD_PPSCBE1 = 572,
            BSIM3_MOD_PPSCBE2 = 573,
            BSIM3_MOD_PPVAG = 574,
            BSIM3_MOD_PWR = 575,
            BSIM3_MOD_PDWG = 576,
            BSIM3_MOD_PDWB = 577,
            BSIM3_MOD_PB0 = 578,
            BSIM3_MOD_PB1 = 579,
            BSIM3_MOD_PALPHA0 = 580,
            BSIM3_MOD_PBETA0 = 581,
            BSIM3_MOD_PPDIBLB = 584,
            BSIM3_MOD_PPRWG = 585,
            BSIM3_MOD_PPRWB = 586,
            BSIM3_MOD_PCDSCD = 587,
            BSIM3_MOD_PAGS = 588,
            BSIM3_MOD_PFRINGE = 591,
            BSIM3_MOD_PELM = 592,
            BSIM3_MOD_PCGSL = 593,
            BSIM3_MOD_PCGDL = 594,
            BSIM3_MOD_PCKAPPA = 595,
            BSIM3_MOD_PCF = 596,
            BSIM3_MOD_PCLC = 597,
            BSIM3_MOD_PCLE = 598,
            BSIM3_MOD_PVFBCV = 599,
            BSIM3_MOD_PACDE = 600,
            BSIM3_MOD_PMOIN = 601,
            BSIM3_MOD_PNOFF = 602,
            BSIM3_MOD_PALPHA1 = 604,
            BSIM3_MOD_PVFB = 605,
            BSIM3_MOD_PVOFFCV = 606,
            BSIM3_MOD_TNOM = 651,
            BSIM3_MOD_CGSO = 652,
            BSIM3_MOD_CGDO = 653,
            BSIM3_MOD_CGBO = 654,
            BSIM3_MOD_XPART = 655,
            BSIM3_MOD_RSH = 656,
            BSIM3_MOD_JS = 657,
            BSIM3_MOD_PB = 658,
            BSIM3_MOD_MJ = 659,
            BSIM3_MOD_PBSW = 660,
            BSIM3_MOD_MJSW = 661,
            BSIM3_MOD_CJ = 662,
            BSIM3_MOD_CJSW = 663,
            BSIM3_MOD_NMOS = 664,
            BSIM3_MOD_PMOS = 665,
            BSIM3_MOD_NOIA = 666,
            BSIM3_MOD_NOIB = 667,
            BSIM3_MOD_NOIC = 668,
            BSIM3_MOD_LINT = 669,
            BSIM3_MOD_LL = 670,
            BSIM3_MOD_LLN = 671,
            BSIM3_MOD_LW = 672,
            BSIM3_MOD_LWN = 673,
            BSIM3_MOD_LWL = 674,
            BSIM3_MOD_LMIN = 675,
            BSIM3_MOD_LMAX = 676,
            BSIM3_MOD_WINT = 677,
            BSIM3_MOD_WL = 678,
            BSIM3_MOD_WLN = 679,
            BSIM3_MOD_WW = 680,
            BSIM3_MOD_WWN = 681,
            BSIM3_MOD_WWL = 682,
            BSIM3_MOD_WMIN = 683,
            BSIM3_MOD_WMAX = 684,
            BSIM3_MOD_DWC = 685,
            BSIM3_MOD_DLC = 686,
            BSIM3_MOD_EM = 687,
            BSIM3_MOD_EF = 688,
            BSIM3_MOD_AF = 689,
            BSIM3_MOD_KF = 690,
            BSIM3_MOD_NJ = 691,
            BSIM3_MOD_XTI = 692,
            BSIM3_MOD_PBSWG = 693,
            BSIM3_MOD_MJSWG = 694,
            BSIM3_MOD_CJSWG = 695,
            BSIM3_MOD_JSW = 696,
            BSIM3_MOD_LLC = 697,
            BSIM3_MOD_LWC = 698,
            BSIM3_MOD_LWLC = 699,
            BSIM3_MOD_WLC = 700,
            BSIM3_MOD_WWC = 701,
            BSIM3_MOD_WWLC = 702
        }
        private static Dictionary<string, IP> _pTable = new Dictionary<string, IP>
        {
            { "capmod", new IP(IF.IOP, (int)_c.BSIM3_MOD_CAPMOD, T.INTEGER, "Capacitance model selector") },
            { "mobmod", new IP(IF.IOP, (int)_c.BSIM3_MOD_MOBMOD, T.INTEGER, "Mobility model selector") },
            { "noimod", new IP(IF.IOP, (int)_c.BSIM3_MOD_NOIMOD, T.INTEGER, "Noise model selector") },
            { "paramchk", new IP(IF.IOP, (int)_c.BSIM3_MOD_PARAMCHK, T.INTEGER, "Model parameter checking selector") },
            { "binunit", new IP(IF.IOP, (int)_c.BSIM3_MOD_BINUNIT, T.INTEGER, "Bin  unit  selector") },
            { "version", new IP(IF.IOP, (int)_c.BSIM3_MOD_VERSION, T.STRING, " parameter for model version") },
            { "tox", new IP(IF.IOP, (int)_c.BSIM3_MOD_TOX, T.REAL, "Gate oxide thickness in meters") },
            { "toxm", new IP(IF.IOP, (int)_c.BSIM3_MOD_TOXM, T.REAL, "Gate oxide thickness used in extraction") },
            { "cdsc", new IP(IF.IOP, (int)_c.BSIM3_MOD_CDSC, T.REAL, "Drain/Source and channel coupling capacitance") },
            { "cdscb", new IP(IF.IOP, (int)_c.BSIM3_MOD_CDSCB, T.REAL, "Body-bias dependence of cdsc") }, 
            { "cdscd", new IP(IF.IOP, (int)_c.BSIM3_MOD_CDSCD, T.REAL, "Drain-bias dependence of cdsc") }, 
            { "cit", new IP(IF.IOP, (int)_c.BSIM3_MOD_CIT, T.REAL, "Interface state capacitance") },
            { "nfactor", new IP(IF.IOP, (int)_c.BSIM3_MOD_NFACTOR, T.REAL, "Subthreshold swing Coefficient") },
            { "xj", new IP(IF.IOP, (int)_c.BSIM3_MOD_XJ, T.REAL, "Junction depth in meters") },
            { "vsat", new IP(IF.IOP, (int)_c.BSIM3_MOD_VSAT, T.REAL, "Saturation velocity at tnom") },
            { "at", new IP(IF.IOP, (int)_c.BSIM3_MOD_AT, T.REAL, "Temperature coefficient of vsat") },
            { "a0", new IP(IF.IOP, (int)_c.BSIM3_MOD_A0, T.REAL, "Non-uniform depletion width effect coefficient.") }, 
            { "ags", new IP(IF.IOP, (int)_c.BSIM3_MOD_AGS, T.REAL, "Gate bias  coefficient of Abulk.") }, 
            { "a1", new IP(IF.IOP, (int)_c.BSIM3_MOD_A1, T.REAL, "Non-saturation effect coefficient") },
            { "a2", new IP(IF.IOP, (int)_c.BSIM3_MOD_A2, T.REAL, "Non-saturation effect coefficient") },
            { "keta", new IP(IF.IOP, (int)_c.BSIM3_MOD_KETA, T.REAL, "Body-bias coefficient of non-uniform depletion width effect.") },
            { "nsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_NSUB, T.REAL, "Substrate doping concentration") },
            { "nch", new IP(IF.IOP, (int)_c.BSIM3_MOD_NPEAK, T.REAL, "Channel doping concentration") },
            { "ngate", new IP(IF.IOP, (int)_c.BSIM3_MOD_NGATE, T.REAL, "Poly-gate doping concentration") },
            { "gamma1", new IP(IF.IOP, (int)_c.BSIM3_MOD_GAMMA1, T.REAL, "Vth body coefficient") },
            { "gamma2", new IP(IF.IOP, (int)_c.BSIM3_MOD_GAMMA2, T.REAL, "Vth body coefficient") },
            { "vbx", new IP(IF.IOP, (int)_c.BSIM3_MOD_VBX, T.REAL, "Vth transition body Voltage") },
            { "vbm", new IP(IF.IOP, (int)_c.BSIM3_MOD_VBM, T.REAL, "Maximum body voltage") },
            { "xt", new IP(IF.IOP, (int)_c.BSIM3_MOD_XT, T.REAL, "Doping depth") },
            { "k1", new IP(IF.IOP, (int)_c.BSIM3_MOD_K1, T.REAL, "Bulk effect coefficient 1") },
            { "kt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_KT1, T.REAL, "Temperature coefficient of Vth") },
            { "kt1l", new IP(IF.IOP, (int)_c.BSIM3_MOD_KT1L, T.REAL, "Temperature coefficient of Vth") },
            { "kt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_KT2, T.REAL, "Body-coefficient of kt1") },
            { "k2", new IP(IF.IOP, (int)_c.BSIM3_MOD_K2, T.REAL, "Bulk effect coefficient 2") },
            { "k3", new IP(IF.IOP, (int)_c.BSIM3_MOD_K3, T.REAL, "Narrow width effect coefficient") },
            { "k3b", new IP(IF.IOP, (int)_c.BSIM3_MOD_K3B, T.REAL, "Body effect coefficient of k3") },
            { "w0", new IP(IF.IOP, (int)_c.BSIM3_MOD_W0, T.REAL, "Narrow width effect parameter") },
            { "nlx", new IP(IF.IOP, (int)_c.BSIM3_MOD_NLX, T.REAL, "Lateral non-uniform doping effect") },
            { "dvt0", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT0, T.REAL, "Short channel effect coeff. 0") },
            { "dvt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT1, T.REAL, "Short channel effect coeff. 1") },
            { "dvt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT2, T.REAL, "Short channel effect coeff. 2") },
            { "dvt0w", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT0W, T.REAL, "Narrow Width coeff. 0") },
            { "dvt1w", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT1W, T.REAL, "Narrow Width effect coeff. 1") },
            { "dvt2w", new IP(IF.IOP, (int)_c.BSIM3_MOD_DVT2W, T.REAL, "Narrow Width effect coeff. 2") },
            { "drout", new IP(IF.IOP, (int)_c.BSIM3_MOD_DROUT, T.REAL, "DIBL coefficient of output resistance") },
            { "dsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_DSUB, T.REAL, "DIBL coefficient in the subthreshold region") },
            { "vth0", new IP(IF.IOP, (int)_c.BSIM3_MOD_VTH0, T.REAL, "Threshold voltage") },
            { "vtho", new IP(IF.IOP, (int)_c.BSIM3_MOD_VTH0, T.REAL, "Threshold voltage") },
            { "ua", new IP(IF.IOP, (int)_c.BSIM3_MOD_UA, T.REAL, "Linear gate dependence of mobility") },
            { "ua1", new IP(IF.IOP, (int)_c.BSIM3_MOD_UA1, T.REAL, "Temperature coefficient of ua") },
            { "ub", new IP(IF.IOP, (int)_c.BSIM3_MOD_UB, T.REAL, "Quadratic gate dependence of mobility") },
            { "ub1", new IP(IF.IOP, (int)_c.BSIM3_MOD_UB1, T.REAL, "Temperature coefficient of ub") },
            { "uc", new IP(IF.IOP, (int)_c.BSIM3_MOD_UC, T.REAL, "Body-bias dependence of mobility") },
            { "uc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_UC1, T.REAL, "Temperature coefficient of uc") },
            { "u0", new IP(IF.IOP, (int)_c.BSIM3_MOD_U0, T.REAL, "Low-field mobility at Tnom") },
            { "ute", new IP(IF.IOP, (int)_c.BSIM3_MOD_UTE, T.REAL, "Temperature coefficient of mobility") },
            { "voff", new IP(IF.IOP, (int)_c.BSIM3_MOD_VOFF, T.REAL, "Threshold voltage offset") },
            { "tnom", new IP(IF.IOP, (int)_c.BSIM3_MOD_TNOM, T.REAL, "Parameter measurement temperature") },
            { "cgso", new IP(IF.IOP, (int)_c.BSIM3_MOD_CGSO, T.REAL, "Gate-source overlap capacitance per width") },
            { "cgdo", new IP(IF.IOP, (int)_c.BSIM3_MOD_CGDO, T.REAL, "Gate-drain overlap capacitance per width") },
            { "cgbo", new IP(IF.IOP, (int)_c.BSIM3_MOD_CGBO, T.REAL, "Gate-bulk overlap capacitance per length") },
            { "xpart", new IP(IF.IOP, (int)_c.BSIM3_MOD_XPART, T.REAL, "Channel charge partitioning") },
            { "elm", new IP(IF.IOP, (int)_c.BSIM3_MOD_ELM, T.REAL, "Non-quasi-static Elmore Constant Parameter") },
            { "delta", new IP(IF.IOP, (int)_c.BSIM3_MOD_DELTA, T.REAL, "Effective Vds parameter") },
            { "rsh", new IP(IF.IOP, (int)_c.BSIM3_MOD_RSH, T.REAL, "Source-drain sheet resistance") },
            { "rdsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_RDSW, T.REAL, "Source-drain resistance per width") },    
            { "prwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_PRWG, T.REAL, "Gate-bias effect on parasitic resistance ") },    
            { "prwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PRWB, T.REAL, "Body-effect on parasitic resistance ") },    
            { "prt", new IP(IF.IOP, (int)_c.BSIM3_MOD_PRT, T.REAL, "Temperature coefficient of parasitic resistance ") },    
            { "eta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_ETA0, T.REAL, "Subthreshold region DIBL coefficient") },
            { "etab", new IP(IF.IOP, (int)_c.BSIM3_MOD_ETAB, T.REAL, "Subthreshold region DIBL coefficient") },
            { "pclm", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCLM, T.REAL, "Channel length modulation Coefficient") },
            { "pdiblc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDIBL1, T.REAL, "Drain-induced barrier lowering coefficient") },   
            { "pdiblc2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDIBL2, T.REAL, "Drain-induced barrier lowering coefficient") },   
            { "pdiblcb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDIBLB, T.REAL, "Body-effect on drain-induced barrier lowering") },   
            { "pscbe1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PSCBE1, T.REAL, "Substrate current body-effect coefficient") },   
            { "pscbe2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PSCBE2, T.REAL, "Substrate current body-effect coefficient") },   
            { "pvag", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVAG, T.REAL, "Gate dependence of output resistance parameter") },   
            { "js", new IP(IF.IOP, (int)_c.BSIM3_MOD_JS, T.REAL, "Source/drain junction reverse saturation current density") },
            { "jsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_JSW, T.REAL, "Sidewall junction reverse saturation current density") },
            { "pb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PB, T.REAL, "Source/drain junction built-in potential") },
            { "nj", new IP(IF.IOP, (int)_c.BSIM3_MOD_NJ, T.REAL, "Source/drain junction emission coefficient") },
            { "xti", new IP(IF.IOP, (int)_c.BSIM3_MOD_XTI, T.REAL, "Junction current temperature exponent") },
            { "mj", new IP(IF.IOP, (int)_c.BSIM3_MOD_MJ, T.REAL, "Source/drain bottom junction capacitance grading coefficient") },
            { "pbsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_PBSW, T.REAL, "Source/drain sidewall junction capacitance built in potential") },
            { "mjsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_MJSW, T.REAL, "Source/drain sidewall junction capacitance grading coefficient") },
            { "pbswg", new IP(IF.IOP, (int)_c.BSIM3_MOD_PBSWG, T.REAL, "Source/drain (gate side) sidewall junction capacitance built in potential") },
            { "mjswg", new IP(IF.IOP, (int)_c.BSIM3_MOD_MJSWG, T.REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient") },
            { "cj", new IP(IF.IOP, (int)_c.BSIM3_MOD_CJ, T.REAL, "Source/drain bottom junction capacitance per unit area") },
            { "vfbcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_VFBCV, T.REAL, "Flat Band Voltage parameter for capmod=0 only") },
            { "vfb", new IP(IF.IOP, (int)_c.BSIM3_MOD_VFB, T.REAL, "Flat Band Voltage") },
            { "cjsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_CJSW, T.REAL, "Source/drain sidewall junction capacitance per unit periphery") },
            { "cjswg", new IP(IF.IOP, (int)_c.BSIM3_MOD_CJSWG, T.REAL, "Source/drain (gate side) sidewall junction capacitance per unit width") },
            { "tpb", new IP(IF.IOP, (int)_c.BSIM3_MOD_TPB, T.REAL, "Temperature coefficient of pb") },
            { "tcj", new IP(IF.IOP, (int)_c.BSIM3_MOD_TCJ, T.REAL, "Temperature coefficient of cj") },
            { "tpbsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_TPBSW, T.REAL, "Temperature coefficient of pbsw") },
            { "tcjsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_TCJSW, T.REAL, "Temperature coefficient of cjsw") },
            { "tpbswg", new IP(IF.IOP, (int)_c.BSIM3_MOD_TPBSWG, T.REAL, "Temperature coefficient of pbswg") },
            { "tcjswg", new IP(IF.IOP, (int)_c.BSIM3_MOD_TCJSWG, T.REAL, "Temperature coefficient of cjswg") },
            { "acde", new IP(IF.IOP, (int)_c.BSIM3_MOD_ACDE, T.REAL, "Exponential coefficient for finite charge thickness") },
            { "moin", new IP(IF.IOP, (int)_c.BSIM3_MOD_MOIN, T.REAL, "Coefficient for gate-bias dependent surface potential") },
            { "noff", new IP(IF.IOP, (int)_c.BSIM3_MOD_NOFF, T.REAL, "C-V turn-on/off parameter") },
            { "voffcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_VOFFCV, T.REAL, "C-V lateral-shift parameter") },
            { "lint", new IP(IF.IOP, (int)_c.BSIM3_MOD_LINT, T.REAL, "Length reduction parameter") },
            { "ll", new IP(IF.IOP, (int)_c.BSIM3_MOD_LL, T.REAL, "Length reduction parameter") },
            { "llc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LLC, T.REAL, "Length reduction parameter for CV") },
            { "lln", new IP(IF.IOP, (int)_c.BSIM3_MOD_LLN, T.REAL, "Length reduction parameter") },
            { "lw", new IP(IF.IOP, (int)_c.BSIM3_MOD_LW, T.REAL, "Length reduction parameter") },
            { "lwc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LWC, T.REAL, "Length reduction parameter for CV") },
            { "lwn", new IP(IF.IOP, (int)_c.BSIM3_MOD_LWN, T.REAL, "Length reduction parameter") },
            { "lwl", new IP(IF.IOP, (int)_c.BSIM3_MOD_LWL, T.REAL, "Length reduction parameter") },
            { "lwlc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LWLC, T.REAL, "Length reduction parameter for CV") },
            { "lmin", new IP(IF.IOP, (int)_c.BSIM3_MOD_LMIN, T.REAL, "Minimum length for the model") },
            { "lmax", new IP(IF.IOP, (int)_c.BSIM3_MOD_LMAX, T.REAL, "Maximum length for the model") },
            { "wr", new IP(IF.IOP, (int)_c.BSIM3_MOD_WR, T.REAL, "Width dependence of rds") },
            { "wint", new IP(IF.IOP, (int)_c.BSIM3_MOD_WINT, T.REAL, "Width reduction parameter") },
            { "dwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_DWG, T.REAL, "Width reduction parameter") },
            { "dwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_DWB, T.REAL, "Width reduction parameter") },
            { "wl", new IP(IF.IOP, (int)_c.BSIM3_MOD_WL, T.REAL, "Width reduction parameter") },
            { "wlc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WLC, T.REAL, "Width reduction parameter for CV") },
            { "wln", new IP(IF.IOP, (int)_c.BSIM3_MOD_WLN, T.REAL, "Width reduction parameter") },
            { "ww", new IP(IF.IOP, (int)_c.BSIM3_MOD_WW, T.REAL, "Width reduction parameter") },
            { "wwc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WWC, T.REAL, "Width reduction parameter for CV") },
            { "wwn", new IP(IF.IOP, (int)_c.BSIM3_MOD_WWN, T.REAL, "Width reduction parameter") },
            { "wwl", new IP(IF.IOP, (int)_c.BSIM3_MOD_WWL, T.REAL, "Width reduction parameter") },
            { "wwlc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WWLC, T.REAL, "Width reduction parameter for CV") },
            { "wmin", new IP(IF.IOP, (int)_c.BSIM3_MOD_WMIN, T.REAL, "Minimum width for the model") },
            { "wmax", new IP(IF.IOP, (int)_c.BSIM3_MOD_WMAX, T.REAL, "Maximum width for the model") },
            { "b0", new IP(IF.IOP, (int)_c.BSIM3_MOD_B0, T.REAL, "Abulk narrow width parameter") },
            { "b1", new IP(IF.IOP, (int)_c.BSIM3_MOD_B1, T.REAL, "Abulk narrow width parameter") },
            { "cgsl", new IP(IF.IOP, (int)_c.BSIM3_MOD_CGSL, T.REAL, "New C-V model parameter") },
            { "cgdl", new IP(IF.IOP, (int)_c.BSIM3_MOD_CGDL, T.REAL, "New C-V model parameter") },
            { "ckappa", new IP(IF.IOP, (int)_c.BSIM3_MOD_CKAPPA, T.REAL, "New C-V model parameter") },
            { "cf", new IP(IF.IOP, (int)_c.BSIM3_MOD_CF, T.REAL, "Fringe capacitance parameter") },
            { "clc", new IP(IF.IOP, (int)_c.BSIM3_MOD_CLC, T.REAL, "Vdsat parameter for C-V model") },
            { "cle", new IP(IF.IOP, (int)_c.BSIM3_MOD_CLE, T.REAL, "Vdsat parameter for C-V model") },
            { "dwc", new IP(IF.IOP, (int)_c.BSIM3_MOD_DWC, T.REAL, "Delta W for C-V model") },
            { "dlc", new IP(IF.IOP, (int)_c.BSIM3_MOD_DLC, T.REAL, "Delta L for C-V model") },
            { "alpha0", new IP(IF.IOP, (int)_c.BSIM3_MOD_ALPHA0, T.REAL, "substrate current model parameter") },
            { "alpha1", new IP(IF.IOP, (int)_c.BSIM3_MOD_ALPHA1, T.REAL, "substrate current model parameter") },
            { "beta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_BETA0, T.REAL, "substrate current model parameter") },
            { "ijth", new IP(IF.IOP, (int)_c.BSIM3_MOD_IJTH, T.REAL, "Diode limiting current") },
            { "lcdsc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCDSC, T.REAL, "Length dependence of cdsc") },
            { "lcdscb", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCDSCB, T.REAL, "Length dependence of cdscb") },
            { "lcdscd", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCDSCD, T.REAL, "Length dependence of cdscd") },
            { "lcit", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCIT, T.REAL, "Length dependence of cit") },
            { "lnfactor", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNFACTOR, T.REAL, "Length dependence of nfactor") },
            { "lxj", new IP(IF.IOP, (int)_c.BSIM3_MOD_LXJ, T.REAL, "Length dependence of xj") },
            { "lvsat", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVSAT, T.REAL, "Length dependence of vsat") },
            { "lat", new IP(IF.IOP, (int)_c.BSIM3_MOD_LAT, T.REAL, "Length dependence of at") },
            { "la0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LA0, T.REAL, "Length dependence of a0") }, 
            { "lags", new IP(IF.IOP, (int)_c.BSIM3_MOD_LAGS, T.REAL, "Length dependence of ags") }, 
            { "la1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LA1, T.REAL, "Length dependence of a1") },
            { "la2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LA2, T.REAL, "Length dependence of a2") },
            { "lketa", new IP(IF.IOP, (int)_c.BSIM3_MOD_LKETA, T.REAL, "Length dependence of keta") },
            { "lnsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNSUB, T.REAL, "Length dependence of nsub") },
            { "lnch", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNPEAK, T.REAL, "Length dependence of nch") },
            { "lngate", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNGATE, T.REAL, "Length dependence of ngate") },
            { "lgamma1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LGAMMA1, T.REAL, "Length dependence of gamma1") },
            { "lgamma2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LGAMMA2, T.REAL, "Length dependence of gamma2") },
            { "lvbx", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVBX, T.REAL, "Length dependence of vbx") },
            { "lvbm", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVBM, T.REAL, "Length dependence of vbm") },
            { "lxt", new IP(IF.IOP, (int)_c.BSIM3_MOD_LXT, T.REAL, "Length dependence of xt") },
            { "lk1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LK1, T.REAL, "Length dependence of k1") },
            { "lkt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LKT1, T.REAL, "Length dependence of kt1") },
            { "lkt1l", new IP(IF.IOP, (int)_c.BSIM3_MOD_LKT1L, T.REAL, "Length dependence of kt1l") },
            { "lkt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LKT2, T.REAL, "Length dependence of kt2") },
            { "lk2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LK2, T.REAL, "Length dependence of k2") },
            { "lk3", new IP(IF.IOP, (int)_c.BSIM3_MOD_LK3, T.REAL, "Length dependence of k3") },
            { "lk3b", new IP(IF.IOP, (int)_c.BSIM3_MOD_LK3B, T.REAL, "Length dependence of k3b") },
            { "lw0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LW0, T.REAL, "Length dependence of w0") },
            { "lnlx", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNLX, T.REAL, "Length dependence of nlx") },
            { "ldvt0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT0, T.REAL, "Length dependence of dvt0") },
            { "ldvt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT1, T.REAL, "Length dependence of dvt1") },
            { "ldvt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT2, T.REAL, "Length dependence of dvt2") },
            { "ldvt0w", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT0W, T.REAL, "Length dependence of dvt0w") },
            { "ldvt1w", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT1W, T.REAL, "Length dependence of dvt1w") },
            { "ldvt2w", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDVT2W, T.REAL, "Length dependence of dvt2w") },
            { "ldrout", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDROUT, T.REAL, "Length dependence of drout") },
            { "ldsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDSUB, T.REAL, "Length dependence of dsub") },
            { "lvth0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVTH0, T.REAL, "Length dependence of vto") },
            { "lvtho", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVTH0, T.REAL, "Length dependence of vto") },
            { "lua", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUA, T.REAL, "Length dependence of ua") },
            { "lua1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUA1, T.REAL, "Length dependence of ua1") },
            { "lub", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUB, T.REAL, "Length dependence of ub") },
            { "lub1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUB1, T.REAL, "Length dependence of ub1") },
            { "luc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUC, T.REAL, "Length dependence of uc") },
            { "luc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUC1, T.REAL, "Length dependence of uc1") },
            { "lu0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LU0, T.REAL, "Length dependence of u0") },
            { "lute", new IP(IF.IOP, (int)_c.BSIM3_MOD_LUTE, T.REAL, "Length dependence of ute") },
            { "lvoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVOFF, T.REAL, "Length dependence of voff") },
            { "lelm", new IP(IF.IOP, (int)_c.BSIM3_MOD_LELM, T.REAL, "Length dependence of elm") },
            { "ldelta", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDELTA, T.REAL, "Length dependence of delta") },
            { "lrdsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_LRDSW, T.REAL, "Length dependence of rdsw ") },    
            { "lprwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPRWG, T.REAL, "Length dependence of prwg ") },    
            { "lprwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPRWB, T.REAL, "Length dependence of prwb ") },    
            { "lprt", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPRT, T.REAL, "Length dependence of prt ") },    
            { "leta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LETA0, T.REAL, "Length dependence of eta0") },   
            { "letab", new IP(IF.IOP, (int)_c.BSIM3_MOD_LETAB, T.REAL, "Length dependence of etab") },   
            { "lpclm", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPCLM, T.REAL, "Length dependence of pclm") },   
            { "lpdiblc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPDIBL1, T.REAL, "Length dependence of pdiblc1") },   
            { "lpdiblc2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPDIBL2, T.REAL, "Length dependence of pdiblc2") },   
            { "lpdiblcb", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPDIBLB, T.REAL, "Length dependence of pdiblcb") },   
            { "lpscbe1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPSCBE1, T.REAL, "Length dependence of pscbe1") },   
            { "lpscbe2", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPSCBE2, T.REAL, "Length dependence of pscbe2") },   
            { "lpvag", new IP(IF.IOP, (int)_c.BSIM3_MOD_LPVAG, T.REAL, "Length dependence of pvag") },   
            { "lwr", new IP(IF.IOP, (int)_c.BSIM3_MOD_LWR, T.REAL, "Length dependence of wr") },
            { "ldwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDWG, T.REAL, "Length dependence of dwg") },
            { "ldwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_LDWB, T.REAL, "Length dependence of dwb") },
            { "lb0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LB0, T.REAL, "Length dependence of b0") },
            { "lb1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LB1, T.REAL, "Length dependence of b1") },
            { "lcgsl", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCGSL, T.REAL, "Length dependence of cgsl") },
            { "lcgdl", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCGDL, T.REAL, "Length dependence of cgdl") },
            { "lckappa", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCKAPPA, T.REAL, "Length dependence of ckappa") },
            { "lcf", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCF, T.REAL, "Length dependence of cf") },
            { "lclc", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCLC, T.REAL, "Length dependence of clc") },
            { "lcle", new IP(IF.IOP, (int)_c.BSIM3_MOD_LCLE, T.REAL, "Length dependence of cle") },
            { "lalpha0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LALPHA0, T.REAL, "Length dependence of alpha0") },
            { "lalpha1", new IP(IF.IOP, (int)_c.BSIM3_MOD_LALPHA1, T.REAL, "Length dependence of alpha1") },
            { "lbeta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_LBETA0, T.REAL, "Length dependence of beta0") },
            { "lvfbcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVFBCV, T.REAL, "Length dependence of vfbcv") },
            { "lvfb", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVFB, T.REAL, "Length dependence of vfb") },
            { "lacde", new IP(IF.IOP, (int)_c.BSIM3_MOD_LACDE, T.REAL, "Length dependence of acde") },
            { "lmoin", new IP(IF.IOP, (int)_c.BSIM3_MOD_LMOIN, T.REAL, "Length dependence of moin") },
            { "lnoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_LNOFF, T.REAL, "Length dependence of noff") },
            { "lvoffcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_LVOFFCV, T.REAL, "Length dependence of voffcv") },
            { "wcdsc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCDSC, T.REAL, "Width dependence of cdsc") },
            { "wcdscb", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCDSCB, T.REAL, "Width dependence of cdscb") },  
            { "wcdscd", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCDSCD, T.REAL, "Width dependence of cdscd") },  
            { "wcit", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCIT, T.REAL, "Width dependence of cit") },
            { "wnfactor", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNFACTOR, T.REAL, "Width dependence of nfactor") },
            { "wxj", new IP(IF.IOP, (int)_c.BSIM3_MOD_WXJ, T.REAL, "Width dependence of xj") },
            { "wvsat", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVSAT, T.REAL, "Width dependence of vsat") },
            { "wat", new IP(IF.IOP, (int)_c.BSIM3_MOD_WAT, T.REAL, "Width dependence of at") },
            { "wa0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WA0, T.REAL, "Width dependence of a0") }, 
            { "wags", new IP(IF.IOP, (int)_c.BSIM3_MOD_WAGS, T.REAL, "Width dependence of ags") }, 
            { "wa1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WA1, T.REAL, "Width dependence of a1") },
            { "wa2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WA2, T.REAL, "Width dependence of a2") },
            { "wketa", new IP(IF.IOP, (int)_c.BSIM3_MOD_WKETA, T.REAL, "Width dependence of keta") },
            { "wnsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNSUB, T.REAL, "Width dependence of nsub") },
            { "wnch", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNPEAK, T.REAL, "Width dependence of nch") },
            { "wngate", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNGATE, T.REAL, "Width dependence of ngate") },
            { "wgamma1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WGAMMA1, T.REAL, "Width dependence of gamma1") },
            { "wgamma2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WGAMMA2, T.REAL, "Width dependence of gamma2") },
            { "wvbx", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVBX, T.REAL, "Width dependence of vbx") },
            { "wvbm", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVBM, T.REAL, "Width dependence of vbm") },
            { "wxt", new IP(IF.IOP, (int)_c.BSIM3_MOD_WXT, T.REAL, "Width dependence of xt") },
            { "wk1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WK1, T.REAL, "Width dependence of k1") },
            { "wkt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WKT1, T.REAL, "Width dependence of kt1") },
            { "wkt1l", new IP(IF.IOP, (int)_c.BSIM3_MOD_WKT1L, T.REAL, "Width dependence of kt1l") },
            { "wkt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WKT2, T.REAL, "Width dependence of kt2") },
            { "wk2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WK2, T.REAL, "Width dependence of k2") },
            { "wk3", new IP(IF.IOP, (int)_c.BSIM3_MOD_WK3, T.REAL, "Width dependence of k3") },
            { "wk3b", new IP(IF.IOP, (int)_c.BSIM3_MOD_WK3B, T.REAL, "Width dependence of k3b") },
            { "ww0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WW0, T.REAL, "Width dependence of w0") },
            { "wnlx", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNLX, T.REAL, "Width dependence of nlx") },
            { "wdvt0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT0, T.REAL, "Width dependence of dvt0") },
            { "wdvt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT1, T.REAL, "Width dependence of dvt1") },
            { "wdvt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT2, T.REAL, "Width dependence of dvt2") },
            { "wdvt0w", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT0W, T.REAL, "Width dependence of dvt0w") },
            { "wdvt1w", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT1W, T.REAL, "Width dependence of dvt1w") },
            { "wdvt2w", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDVT2W, T.REAL, "Width dependence of dvt2w") },
            { "wdrout", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDROUT, T.REAL, "Width dependence of drout") },
            { "wdsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDSUB, T.REAL, "Width dependence of dsub") },
            { "wvth0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVTH0, T.REAL, "Width dependence of vto") },
            { "wvtho", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVTH0, T.REAL, "Width dependence of vto") },
            { "wua", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUA, T.REAL, "Width dependence of ua") },
            { "wua1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUA1, T.REAL, "Width dependence of ua1") },
            { "wub", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUB, T.REAL, "Width dependence of ub") },
            { "wub1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUB1, T.REAL, "Width dependence of ub1") },
            { "wuc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUC, T.REAL, "Width dependence of uc") },
            { "wuc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUC1, T.REAL, "Width dependence of uc1") },
            { "wu0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WU0, T.REAL, "Width dependence of u0") },
            { "wute", new IP(IF.IOP, (int)_c.BSIM3_MOD_WUTE, T.REAL, "Width dependence of ute") },
            { "wvoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVOFF, T.REAL, "Width dependence of voff") },
            { "welm", new IP(IF.IOP, (int)_c.BSIM3_MOD_WELM, T.REAL, "Width dependence of elm") },
            { "wdelta", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDELTA, T.REAL, "Width dependence of delta") },
            { "wrdsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_WRDSW, T.REAL, "Width dependence of rdsw ") },
            { "wprwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPRWG, T.REAL, "Width dependence of prwg ") },
            { "wprwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPRWB, T.REAL, "Width dependence of prwb ") },
            { "wprt", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPRT, T.REAL, "Width dependence of prt") },
            { "weta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WETA0, T.REAL, "Width dependence of eta0") },   
            { "wetab", new IP(IF.IOP, (int)_c.BSIM3_MOD_WETAB, T.REAL, "Width dependence of etab") },   
            { "wpclm", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPCLM, T.REAL, "Width dependence of pclm") },   
            { "wpdiblc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPDIBL1, T.REAL, "Width dependence of pdiblc1") },   
            { "wpdiblc2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPDIBL2, T.REAL, "Width dependence of pdiblc2") },   
            { "wpdiblcb", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPDIBLB, T.REAL, "Width dependence of pdiblcb") },   
            { "wpscbe1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPSCBE1, T.REAL, "Width dependence of pscbe1") },   
            { "wpscbe2", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPSCBE2, T.REAL, "Width dependence of pscbe2") },   
            { "wpvag", new IP(IF.IOP, (int)_c.BSIM3_MOD_WPVAG, T.REAL, "Width dependence of pvag") },   
            { "wwr", new IP(IF.IOP, (int)_c.BSIM3_MOD_WWR, T.REAL, "Width dependence of wr") },
            { "wdwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDWG, T.REAL, "Width dependence of dwg") },
            { "wdwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_WDWB, T.REAL, "Width dependence of dwb") },
            { "wb0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WB0, T.REAL, "Width dependence of b0") },
            { "wb1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WB1, T.REAL, "Width dependence of b1") },
            { "wcgsl", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCGSL, T.REAL, "Width dependence of cgsl") },
            { "wcgdl", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCGDL, T.REAL, "Width dependence of cgdl") },
            { "wckappa", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCKAPPA, T.REAL, "Width dependence of ckappa") },
            { "wcf", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCF, T.REAL, "Width dependence of cf") },
            { "wclc", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCLC, T.REAL, "Width dependence of clc") },
            { "wcle", new IP(IF.IOP, (int)_c.BSIM3_MOD_WCLE, T.REAL, "Width dependence of cle") },
            { "walpha0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WALPHA0, T.REAL, "Width dependence of alpha0") },
            { "walpha1", new IP(IF.IOP, (int)_c.BSIM3_MOD_WALPHA1, T.REAL, "Width dependence of alpha1") },
            { "wbeta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_WBETA0, T.REAL, "Width dependence of beta0") },
            { "wvfbcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVFBCV, T.REAL, "Width dependence of vfbcv") },
            { "wvfb", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVFB, T.REAL, "Width dependence of vfb") },
            { "wacde", new IP(IF.IOP, (int)_c.BSIM3_MOD_WACDE, T.REAL, "Width dependence of acde") },
            { "wmoin", new IP(IF.IOP, (int)_c.BSIM3_MOD_WMOIN, T.REAL, "Width dependence of moin") },
            { "wnoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_WNOFF, T.REAL, "Width dependence of noff") },
            { "wvoffcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_WVOFFCV, T.REAL, "Width dependence of voffcv") },
            { "pcdsc", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCDSC, T.REAL, "Cross-term dependence of cdsc") },
            { "pcdscb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCDSCB, T.REAL, "Cross-term dependence of cdscb") }, 
            { "pcdscd", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCDSCD, T.REAL, "Cross-term dependence of cdscd") },
            { "pcit", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCIT, T.REAL, "Cross-term dependence of cit") },
            { "pnfactor", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNFACTOR, T.REAL, "Cross-term dependence of nfactor") },
            { "pxj", new IP(IF.IOP, (int)_c.BSIM3_MOD_PXJ, T.REAL, "Cross-term dependence of xj") },
            { "pvsat", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVSAT, T.REAL, "Cross-term dependence of vsat") },
            { "pat", new IP(IF.IOP, (int)_c.BSIM3_MOD_PAT, T.REAL, "Cross-term dependence of at") },
            { "pa0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PA0, T.REAL, "Cross-term dependence of a0") }, 
            { "pags", new IP(IF.IOP, (int)_c.BSIM3_MOD_PAGS, T.REAL, "Cross-term dependence of ags") },
            { "pa1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PA1, T.REAL, "Cross-term dependence of a1") },
            { "pa2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PA2, T.REAL, "Cross-term dependence of a2") },
            { "pketa", new IP(IF.IOP, (int)_c.BSIM3_MOD_PKETA, T.REAL, "Cross-term dependence of keta") },
            { "pnsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNSUB, T.REAL, "Cross-term dependence of nsub") },
            { "pnch", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNPEAK, T.REAL, "Cross-term dependence of nch") },
            { "pngate", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNGATE, T.REAL, "Cross-term dependence of ngate") },
            { "pgamma1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PGAMMA1, T.REAL, "Cross-term dependence of gamma1") },
            { "pgamma2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PGAMMA2, T.REAL, "Cross-term dependence of gamma2") },
            { "pvbx", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVBX, T.REAL, "Cross-term dependence of vbx") },
            { "pvbm", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVBM, T.REAL, "Cross-term dependence of vbm") },
            { "pxt", new IP(IF.IOP, (int)_c.BSIM3_MOD_PXT, T.REAL, "Cross-term dependence of xt") },
            { "pk1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PK1, T.REAL, "Cross-term dependence of k1") },
            { "pkt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PKT1, T.REAL, "Cross-term dependence of kt1") },
            { "pkt1l", new IP(IF.IOP, (int)_c.BSIM3_MOD_PKT1L, T.REAL, "Cross-term dependence of kt1l") },
            { "pkt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PKT2, T.REAL, "Cross-term dependence of kt2") },
            { "pk2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PK2, T.REAL, "Cross-term dependence of k2") },
            { "pk3", new IP(IF.IOP, (int)_c.BSIM3_MOD_PK3, T.REAL, "Cross-term dependence of k3") },
            { "pk3b", new IP(IF.IOP, (int)_c.BSIM3_MOD_PK3B, T.REAL, "Cross-term dependence of k3b") },
            { "pw0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PW0, T.REAL, "Cross-term dependence of w0") },
            { "pnlx", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNLX, T.REAL, "Cross-term dependence of nlx") },
            { "pdvt0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT0, T.REAL, "Cross-term dependence of dvt0") },
            { "pdvt1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT1, T.REAL, "Cross-term dependence of dvt1") },
            { "pdvt2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT2, T.REAL, "Cross-term dependence of dvt2") },
            { "pdvt0w", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT0W, T.REAL, "Cross-term dependence of dvt0w") },
            { "pdvt1w", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT1W, T.REAL, "Cross-term dependence of dvt1w") },
            { "pdvt2w", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDVT2W, T.REAL, "Cross-term dependence of dvt2w") },
            { "pdrout", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDROUT, T.REAL, "Cross-term dependence of drout") },
            { "pdsub", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDSUB, T.REAL, "Cross-term dependence of dsub") },
            { "pvth0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVTH0, T.REAL, "Cross-term dependence of vto") },
            { "pvtho", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVTH0, T.REAL, "Cross-term dependence of vto") },
            { "pua", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUA, T.REAL, "Cross-term dependence of ua") },
            { "pua1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUA1, T.REAL, "Cross-term dependence of ua1") },
            { "pub", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUB, T.REAL, "Cross-term dependence of ub") },
            { "pub1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUB1, T.REAL, "Cross-term dependence of ub1") },
            { "puc", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUC, T.REAL, "Cross-term dependence of uc") },
            { "puc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUC1, T.REAL, "Cross-term dependence of uc1") },
            { "pu0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PU0, T.REAL, "Cross-term dependence of u0") },
            { "pute", new IP(IF.IOP, (int)_c.BSIM3_MOD_PUTE, T.REAL, "Cross-term dependence of ute") },
            { "pvoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVOFF, T.REAL, "Cross-term dependence of voff") },
            { "pelm", new IP(IF.IOP, (int)_c.BSIM3_MOD_PELM, T.REAL, "Cross-term dependence of elm") },
            { "pdelta", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDELTA, T.REAL, "Cross-term dependence of delta") },
            { "prdsw", new IP(IF.IOP, (int)_c.BSIM3_MOD_PRDSW, T.REAL, "Cross-term dependence of rdsw ") },    
            { "pprwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPRWG, T.REAL, "Cross-term dependence of prwg ") },    
            { "pprwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPRWB, T.REAL, "Cross-term dependence of prwb ") },    
            { "pprt", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPRT, T.REAL, "Cross-term dependence of prt ") },
            { "peta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PETA0, T.REAL, "Cross-term dependence of eta0") },
            { "petab", new IP(IF.IOP, (int)_c.BSIM3_MOD_PETAB, T.REAL, "Cross-term dependence of etab") },
            { "ppclm", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPCLM, T.REAL, "Cross-term dependence of pclm") },
            { "ppdiblc1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPDIBL1, T.REAL, "Cross-term dependence of pdiblc1") },
            { "ppdiblc2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPDIBL2, T.REAL, "Cross-term dependence of pdiblc2") },
            { "ppdiblcb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPDIBLB, T.REAL, "Cross-term dependence of pdiblcb") },
            { "ppscbe1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPSCBE1, T.REAL, "Cross-term dependence of pscbe1") },
            { "ppscbe2", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPSCBE2, T.REAL, "Cross-term dependence of pscbe2") },
            { "ppvag", new IP(IF.IOP, (int)_c.BSIM3_MOD_PPVAG, T.REAL, "Cross-term dependence of pvag") },   
            { "pwr", new IP(IF.IOP, (int)_c.BSIM3_MOD_PWR, T.REAL, "Cross-term dependence of wr") },
            { "pdwg", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDWG, T.REAL, "Cross-term dependence of dwg") },
            { "pdwb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PDWB, T.REAL, "Cross-term dependence of dwb") },
            { "pb0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PB0, T.REAL, "Cross-term dependence of b0") },
            { "pb1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PB1, T.REAL, "Cross-term dependence of b1") },
            { "pcgsl", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCGSL, T.REAL, "Cross-term dependence of cgsl") },
            { "pcgdl", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCGDL, T.REAL, "Cross-term dependence of cgdl") },
            { "pckappa", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCKAPPA, T.REAL, "Cross-term dependence of ckappa") },
            { "pcf", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCF, T.REAL, "Cross-term dependence of cf") },
            { "pclc", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCLC, T.REAL, "Cross-term dependence of clc") },
            { "pcle", new IP(IF.IOP, (int)_c.BSIM3_MOD_PCLE, T.REAL, "Cross-term dependence of cle") },
            { "palpha0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PALPHA0, T.REAL, "Cross-term dependence of alpha0") },
            { "palpha1", new IP(IF.IOP, (int)_c.BSIM3_MOD_PALPHA1, T.REAL, "Cross-term dependence of alpha1") },
            { "pbeta0", new IP(IF.IOP, (int)_c.BSIM3_MOD_PBETA0, T.REAL, "Cross-term dependence of beta0") },
            { "pvfbcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVFBCV, T.REAL, "Cross-term dependence of vfbcv") },
            { "pvfb", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVFB, T.REAL, "Cross-term dependence of vfb") },
            { "pacde", new IP(IF.IOP, (int)_c.BSIM3_MOD_PACDE, T.REAL, "Cross-term dependence of acde") },
            { "pmoin", new IP(IF.IOP, (int)_c.BSIM3_MOD_PMOIN, T.REAL, "Cross-term dependence of moin") },
            { "pnoff", new IP(IF.IOP, (int)_c.BSIM3_MOD_PNOFF, T.REAL, "Cross-term dependence of noff") },
            { "pvoffcv", new IP(IF.IOP, (int)_c.BSIM3_MOD_PVOFFCV, T.REAL, "Cross-term dependence of voffcv") },
            { "noia", new IP(IF.IOP, (int)_c.BSIM3_MOD_NOIA, T.REAL, "Flicker noise parameter") },
            { "noib", new IP(IF.IOP, (int)_c.BSIM3_MOD_NOIB, T.REAL, "Flicker noise parameter") },
            { "noic", new IP(IF.IOP, (int)_c.BSIM3_MOD_NOIC, T.REAL, "Flicker noise parameter") },
            { "em", new IP(IF.IOP, (int)_c.BSIM3_MOD_EM, T.REAL, "Flicker noise parameter") },
            { "ef", new IP(IF.IOP, (int)_c.BSIM3_MOD_EF, T.REAL, "Flicker noise frequency exponent") },
            { "af", new IP(IF.IOP, (int)_c.BSIM3_MOD_AF, T.REAL, "Flicker noise exponent") },
            { "kf", new IP(IF.IOP, (int)_c.BSIM3_MOD_KF, T.REAL, "Flicker noise coefficient") },
            { "nmos", new IP(IF.IP, (int)_c.BSIM3_MOD_NMOS, T.FLAG, "Flag to indicate NMOS") },
            { "pmos", new IP(IF.IP, (int)_c.BSIM3_MOD_PMOS, T.FLAG, "Flag to indicate PMOS") }
        };

        public Parameter<int> BSIM3capMod { get; } = new Parameter<int>(3);
        public Parameter<int> BSIM3mobMod { get; } = new Parameter<int>(1);
        public Parameter<int> BSIM3noiMod { get; } = new Parameter<int>(1);
        public Parameter<int> BSIM3paramChk { get; } = new Parameter<int>();
        public Parameter<int> BSIM3binUnit { get; } = new Parameter<int>(1);
        public Parameter<string> BSIM3version { get; } = new Parameter<string>("3.2.4");
        public Parameter<double> BSIM3tox { get; } = new Parameter<double>(150.0e-10);
        public Parameter<double> BSIM3toxm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cdsc { get; } = new Parameter<double>(2.4e-4);
        public Parameter<double> BSIM3cdscb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cdscd { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cit { get; } = new Parameter<double>();
        public Parameter<double> BSIM3nfactor { get; } = new Parameter<double>(1);
        public Parameter<double> BSIM3xj { get; } = new Parameter<double>(0.15e-6);
        public Parameter<double> BSIM3vsat { get; } = new Parameter<double>(8.0e4);
        public Parameter<double> BSIM3at { get; } = new Parameter<double>(3.3e4);
        public Parameter<double> BSIM3a0 { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3ags { get; } = new Parameter<double>();
        public Parameter<double> BSIM3a1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3a2 { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3keta { get; } = new Parameter<double>(-0.047);
        public Parameter<double> BSIM3nsub { get; } = new Parameter<double>(6.0e16);
        public Parameter<double> BSIM3npeak { get; } = new Parameter<double>(1.7e17);
        public Parameter<double> BSIM3ngate { get; } = new Parameter<double>();
        public Parameter<double> BSIM3gamma1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3gamma2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3vbx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3vbm { get; } = new Parameter<double>(-3.0);

        public Parameter<double> BSIM3xt { get; } = new Parameter<double>(1.55e-7);
        public Parameter<double> BSIM3k1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3kt1 { get; } = new Parameter<double>(-0.11);
        public Parameter<double> BSIM3kt1l { get; } = new Parameter<double>();
        public Parameter<double> BSIM3kt2 { get; } = new Parameter<double>(0.022);
        public Parameter<double> BSIM3k2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3k3 { get; } = new Parameter<double>(80.0);
        public Parameter<double> BSIM3k3b { get; } = new Parameter<double>();
        public Parameter<double> BSIM3w0 { get; } = new Parameter<double>(2.5e-6);
        public Parameter<double> BSIM3nlx { get; } = new Parameter<double>(1.74e-7);
        public Parameter<double> BSIM3dvt0 { get; } = new Parameter<double>(2.2);
        public Parameter<double> BSIM3dvt1 { get; } = new Parameter<double>(0.53);
        public Parameter<double> BSIM3dvt2 { get; } = new Parameter<double>(-0.032);
        public Parameter<double> BSIM3dvt0w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3dvt1w { get; } = new Parameter<double>(5.3e6);
        public Parameter<double> BSIM3dvt2w { get; } = new Parameter<double>(-0.032);
        public Parameter<double> BSIM3drout { get; } = new Parameter<double>(0.56);
        public Parameter<double> BSIM3dsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3vth0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ua { get; } = new Parameter<double>(2.25e-9);
        public Parameter<double> BSIM3ua1 { get; } = new Parameter<double>(4.31e-9);
        public Parameter<double> BSIM3ub { get; } = new Parameter<double>(5.87e-19);
        public Parameter<double> BSIM3ub1 { get; } = new Parameter<double>(-7.61e-18);
        public Parameter<double> BSIM3uc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3uc1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3u0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ute { get; } = new Parameter<double>(-1.5);
        public Parameter<double> BSIM3voff { get; } = new Parameter<double>(-0.08);
        public Parameter<double> BSIM3tnom { get; } = new Parameter<double>(300.15);
        public Parameter<double> BSIM3cgso { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cgdo { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cgbo { get; } = new Parameter<double>();
        public Parameter<double> BSIM3xpart { get; } = new Parameter<double>();
        public Parameter<double> BSIM3elm { get; } = new Parameter<double>(5.0);
        public Parameter<double> BSIM3delta { get; } = new Parameter<double>(0.01);
        public Parameter<double> BSIM3sheetResistance { get; } = new Parameter<double>();
        public Parameter<double> BSIM3rdsw { get; } = new Parameter<double>();

        public Parameter<double> BSIM3prwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3prwb { get; } = new Parameter<double>();

        public Parameter<double> BSIM3prt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3eta0 { get; } = new Parameter<double>(0.08);
        public Parameter<double> BSIM3etab { get; } = new Parameter<double>(-0.07);
        public Parameter<double> BSIM3pclm { get; } = new Parameter<double>(1.3);
        public Parameter<double> BSIM3pdibl1 { get; } = new Parameter<double>(0.39);
        public Parameter<double> BSIM3pdibl2 { get; } = new Parameter<double>(0.0086);
        public Parameter<double> BSIM3pdiblb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pscbe1 { get; } = new Parameter<double>(4.24e8);
        public Parameter<double> BSIM3pscbe2 { get; } = new Parameter<double>(1.0e-5);
        public Parameter<double> BSIM3pvag { get; } = new Parameter<double>();
        public Parameter<double> BSIM3jctSatCurDensity { get; } = new Parameter<double>();
        public Parameter<double> BSIM3jctSidewallSatCurDensity { get; } = new Parameter<double>();
        public Parameter<double> BSIM3bulkJctPotential { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3jctEmissionCoeff { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3jctTempExponent { get; } = new Parameter<double>(3.0);
        public Parameter<double> BSIM3bulkJctBotGradingCoeff { get; } = new Parameter<double>(0.5);
        public Parameter<double> BSIM3sidewallJctPotential { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3bulkJctSideGradingCoeff { get; } = new Parameter<double>(0.33);
        public Parameter<double> BSIM3GatesidewallJctPotential { get; } = new Parameter<double>();
        public Parameter<double> BSIM3bulkJctGateSideGradingCoeff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3unitAreaJctCap { get; } = new Parameter<double>(5.0e-4);
        public Parameter<double> BSIM3vfbcv { get; } = new Parameter<double>(-1.0);
        public Parameter<double> BSIM3vfb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3unitLengthSidewallJctCap { get; } = new Parameter<double>(5.0e-10);
        public Parameter<double> BSIM3unitLengthGateSidewallJctCap { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tpb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tcj { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tpbsw { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tcjsw { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tpbswg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3tcjswg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3acde { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3moin { get; } = new Parameter<double>(15.0);
        public Parameter<double> BSIM3noff { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3voffcv { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lint { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Ll { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Llc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lln { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3Lw { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lwc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lwn { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3Lwl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lwlc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lmin { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Lmax { get; } = new Parameter<double>(1.0);

        public Parameter<double> BSIM3wr { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3Wint { get; } = new Parameter<double>();
        public Parameter<double> BSIM3dwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3dwb { get; } = new Parameter<double>();

        public Parameter<double> BSIM3Wl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wlc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wln { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3Ww { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wwc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wwn { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3Wwl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wwlc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wmin { get; } = new Parameter<double>();
        public Parameter<double> BSIM3Wmax { get; } = new Parameter<double>(1.0);

        public Parameter<double> BSIM3b0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3b1 { get; } = new Parameter<double>();

        public Parameter<double> BSIM3cgsl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3cgdl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ckappa { get; } = new Parameter<double>(0.6);
        public Parameter<double> BSIM3cf { get; } = new Parameter<double>();
        public Parameter<double> BSIM3clc { get; } = new Parameter<double>(0.1e-6);
        public Parameter<double> BSIM3cle { get; } = new Parameter<double>(0.6);
        public Parameter<double> BSIM3dwc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3dlc { get; } = new Parameter<double>();

        public Parameter<double> BSIM3alpha0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3alpha1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3beta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ijth { get; } = new Parameter<double>(0.1);

        public Parameter<double> BSIM3lcdsc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcdscb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcdscd { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcit { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lnfactor { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lxj { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvsat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3la0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lags { get; } = new Parameter<double>();
        public Parameter<double> BSIM3la1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3la2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lketa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lnsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lnpeak { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lngate { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lgamma1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lgamma2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvbx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvbm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lxt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lk1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lkt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lkt1l { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lkt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lk2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lk3 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lk3b { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lw0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lnlx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt0w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt1w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldvt2w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldrout { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvth0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lua { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lua1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lub1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3luc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3luc1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lu0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lute { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lelm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldelta { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lrdsw { get; } = new Parameter<double>();

        public Parameter<double> BSIM3lprwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lprwb { get; } = new Parameter<double>();

        public Parameter<double> BSIM3lprt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3leta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3letab { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpclm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpdibl1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpdibl2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpdiblb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpscbe1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpscbe2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lpvag { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lwr { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ldwb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lb0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lb1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcgsl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcgdl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lckappa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcf { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lclc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lcle { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lalpha0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lalpha1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lbeta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvfbcv { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvfb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lacde { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lmoin { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lnoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3lvoffcv { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcdsc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcdscb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcdscd { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcit { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wnfactor { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wxj { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvsat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wa0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wags { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wa1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wa2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wketa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wnsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wnpeak { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wngate { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wgamma1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wgamma2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvbx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvbm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wxt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wk1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wkt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wkt1l { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wkt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wk2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wk3 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wk3b { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ww0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wnlx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt0w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt1w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdvt2w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdrout { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvth0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wua { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wua1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wub1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wuc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wuc1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wu0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wute { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3welm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdelta { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wrdsw { get; } = new Parameter<double>();

        public Parameter<double> BSIM3wprwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wprwb { get; } = new Parameter<double>();

        public Parameter<double> BSIM3wprt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3weta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wetab { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpclm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpdibl1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpdibl2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpdiblb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpscbe1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpscbe2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wpvag { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wwr { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wdwb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wb0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wb1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcgsl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcgdl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wckappa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcf { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wclc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wcle { get; } = new Parameter<double>();
        public Parameter<double> BSIM3walpha0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3walpha1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wbeta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvfbcv { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvfb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wacde { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wmoin { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wnoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3wvoffcv { get; } = new Parameter<double>();

        public Parameter<double> BSIM3pcdsc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcdscb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcdscd { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcit { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pnfactor { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pxj { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvsat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pat { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pa0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pags { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pa1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pa2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pketa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pnsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pnpeak { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pngate { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pgamma1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pgamma2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvbx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvbm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pxt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pk1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pkt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pkt1l { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pkt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pk2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pk3 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pk3b { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pw0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pnlx { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt0w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt1w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdvt2w { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdrout { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdsub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvth0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pua { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pua1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pub { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pub1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3puc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3puc1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pu0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pute { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pelm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdelta { get; } = new Parameter<double>();
        public Parameter<double> BSIM3prdsw { get; } = new Parameter<double>();

        public Parameter<double> BSIM3pprwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pprwb { get; } = new Parameter<double>();

        public Parameter<double> BSIM3pprt { get; } = new Parameter<double>();
        public Parameter<double> BSIM3peta0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3petab { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppclm { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppdibl1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppdibl2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppdiblb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppscbe1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppscbe2 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3ppvag { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pwr { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdwg { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pdwb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pb0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pb1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcgsl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcgdl { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pckappa { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcf { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pclc { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pcle { get; } = new Parameter<double>();
        public Parameter<double> BSIM3palpha0 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3palpha1 { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pbeta0 { get; } = new Parameter<double>(30.0);
        public Parameter<double> BSIM3pvfbcv { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvfb { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pacde { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pmoin { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pnoff { get; } = new Parameter<double>();
        public Parameter<double> BSIM3pvoffcv { get; } = new Parameter<double>();

        public Parameter<double> BSIM3oxideTrapDensityA { get; } = new Parameter<double>();
        public Parameter<double> BSIM3oxideTrapDensityB { get; } = new Parameter<double>();
        public Parameter<double> BSIM3oxideTrapDensityC { get; } = new Parameter<double>();
        public Parameter<double> BSIM3em { get; } = new Parameter<double>(4.1e7);
        public Parameter<double> BSIM3ef { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3af { get; } = new Parameter<double>(1.0);
        public Parameter<double> BSIM3kf { get; } = new Parameter<double>();

        public Parameter<double> BSIM3type { get; } = new Parameter<double>(1.0);
        #endregion

        #region Calculated constants
        // Pre-calculated constants
        public double BSIM3cFringOut { get; private set; }
        public double BSIM3cFringMax { get; private set; }
        public double BSIM3vtm { get; private set; }
        public double BSIM3cox { get; private set; }
        public double BSIM3cof1 { get; private set; }
        public double BSIM3cof2 { get; private set; }
        public double BSIM3cof3 { get; private set; }
        public double BSIM3cof4 { get; private set; }
        public double BSIM3vcrit { get; private set; }
        public double BSIM3factor1 { get; private set; }
        public double BSIM3PhiB { get; private set; }
        public double BSIM3PhiBSW { get; private set; }
        public double BSIM3PhiBSWG { get; private set; }
        public double BSIM3jctTempSatCurDensity { get; private set; }
        public double BSIM3jctSidewallTempSatCurDensity { get; private set; }
        public double BSIM3unitAreaTempJctCap { get; private set; }
        public double BSIM3unitLengthSidewallTempJctCap { get; private set; }
        public double BSIM3unitLengthGateSidewallTempJctCap { get; private set; }
        #endregion

        #region Constants
        public const double KboQ = 8.617087e-5;  /* Kb / q  where q = 1.60219e-19 */
        public const double MAX_EXP = 5.834617425e14;
        public const double MIN_EXP = 1.713908431e-15;
        public const double EXP_THRESHOLD = 34.0;
        public const double SMOOTHFACTOR = 0.1;
        public const double EPSOX = 3.453133e-11;
        public const double EPSSI = 1.03594e-10;
        public const double PI = 3.141592654;
        public const double Charge_q = 1.60219e-19;
        public const double Meter2Micron = 1.0e6;
        #endregion

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name"></param>
        public BSIM3v24Model(string name)
            : base(name)
        {
            // Define parameters

        }

        /// <summary>
        /// Set parameter
        /// </summary>
        protected override void Param(int id, object value, Circuit ckt = null)
        {
            switch ((_c)id)
            {
                case _c.BSIM3_MOD_MOBMOD:
                    BSIM3mobMod.Par((int)value);
                    break;
                case _c.BSIM3_MOD_BINUNIT:
                    BSIM3binUnit.Par((int)value);
                    break;
                case _c.BSIM3_MOD_PARAMCHK:
                    BSIM3paramChk.Par((int)value);
                    break;
                case _c.BSIM3_MOD_CAPMOD:
                    BSIM3capMod.Par((int)value);
                    break;
                case _c.BSIM3_MOD_NOIMOD:
                    BSIM3noiMod.Par((int)value);
                    break;
                case _c.BSIM3_MOD_VERSION:
                    // Sometimes, the format is in that of a double, so let's convert it
                    string version = (string)value;
                    if (version == "3.24")
                        version = "3.2.4";
                    BSIM3version.Par(version);
                    break;
                case _c.BSIM3_MOD_TOX:
                    BSIM3tox.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TOXM:
                    BSIM3toxm.Par((double)value);
                    break;

                case _c.BSIM3_MOD_CDSC:
                    BSIM3cdsc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CDSCB:
                    BSIM3cdscb.Par((double)value);
                    break;

                case _c.BSIM3_MOD_CDSCD:
                    BSIM3cdscd.Par((double)value);
                    break;

                case _c.BSIM3_MOD_CIT:
                    BSIM3cit.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NFACTOR:
                    BSIM3nfactor.Par((double)value);
                    break;
                case _c.BSIM3_MOD_XJ:
                    BSIM3xj.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VSAT:
                    BSIM3vsat.Par((double)value);
                    break;
                case _c.BSIM3_MOD_A0:
                    BSIM3a0.Par((double)value);
                    break;

                case _c.BSIM3_MOD_AGS:
                    BSIM3ags.Par((double)value);
                    break;

                case _c.BSIM3_MOD_A1:
                    BSIM3a1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_A2:
                    BSIM3a2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_AT:
                    BSIM3at.Par((double)value);
                    break;
                case _c.BSIM3_MOD_KETA:
                    BSIM3keta.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NSUB:
                    BSIM3nsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NPEAK:
                    BSIM3npeak.Par((double)value);
                    if (BSIM3npeak > 1.0e20)
                        BSIM3npeak.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_NGATE:
                    BSIM3ngate.Par((double)value);
                    if (BSIM3ngate > 1.0e23)
                        BSIM3ngate.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_GAMMA1:
                    BSIM3gamma1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_GAMMA2:
                    BSIM3gamma2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VBX:
                    BSIM3vbx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VBM:
                    BSIM3vbm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_XT:
                    BSIM3xt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_K1:
                    BSIM3k1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_KT1:
                    BSIM3kt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_KT1L:
                    BSIM3kt1l.Par((double)value);
                    break;
                case _c.BSIM3_MOD_KT2:
                    BSIM3kt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_K2:
                    BSIM3k2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_K3:
                    BSIM3k3.Par((double)value);
                    break;
                case _c.BSIM3_MOD_K3B:
                    BSIM3k3b.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NLX:
                    BSIM3nlx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_W0:
                    BSIM3w0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT0:
                    BSIM3dvt0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT1:
                    BSIM3dvt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT2:
                    BSIM3dvt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT0W:
                    BSIM3dvt0w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT1W:
                    BSIM3dvt1w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DVT2W:
                    BSIM3dvt2w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DROUT:
                    BSIM3drout.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DSUB:
                    BSIM3dsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VTH0:
                    BSIM3vth0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UA:
                    BSIM3ua.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UA1:
                    BSIM3ua1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UB:
                    BSIM3ub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UB1:
                    BSIM3ub1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UC:
                    BSIM3uc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UC1:
                    BSIM3uc1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_U0:
                    BSIM3u0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_UTE:
                    BSIM3ute.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VOFF:
                    BSIM3voff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DELTA:
                    BSIM3delta.Par((double)value);
                    break;
                case _c.BSIM3_MOD_RDSW:
                    BSIM3rdsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PRWG:
                    BSIM3prwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PRWB:
                    BSIM3prwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PRT:
                    BSIM3prt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_ETA0:
                    BSIM3eta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_ETAB:
                    BSIM3etab.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCLM:
                    BSIM3pclm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDIBL1:
                    BSIM3pdibl1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDIBL2:
                    BSIM3pdibl2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDIBLB:
                    BSIM3pdiblb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PSCBE1:
                    BSIM3pscbe1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PSCBE2:
                    BSIM3pscbe2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVAG:
                    BSIM3pvag.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WR:
                    BSIM3wr.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DWG:
                    BSIM3dwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DWB:
                    BSIM3dwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_B0:
                    BSIM3b0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_B1:
                    BSIM3b1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_ALPHA0:
                    BSIM3alpha0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_ALPHA1:
                    BSIM3alpha1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_BETA0:
                    BSIM3beta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_IJTH:
                    BSIM3ijth.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VFB:
                    BSIM3vfb.Par((double)value);
                    break;

                case _c.BSIM3_MOD_ELM:
                    BSIM3elm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CGSL:
                    BSIM3cgsl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CGDL:
                    BSIM3cgdl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CKAPPA:
                    BSIM3ckappa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CF:
                    BSIM3cf.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CLC:
                    BSIM3clc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CLE:
                    BSIM3cle.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DWC:
                    BSIM3dwc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_DLC:
                    BSIM3dlc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VFBCV:
                    BSIM3vfbcv.Par((double)value);
                    break;
                case _c.BSIM3_MOD_ACDE:
                    BSIM3acde.Par((double)value);
                    break;
                case _c.BSIM3_MOD_MOIN:
                    BSIM3moin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NOFF:
                    BSIM3noff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_VOFFCV:
                    BSIM3voffcv.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TCJ:
                    BSIM3tcj.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TPB:
                    BSIM3tpb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TCJSW:
                    BSIM3tcjsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TPBSW:
                    BSIM3tpbsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TCJSWG:
                    BSIM3tcjswg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_TPBSWG:
                    BSIM3tpbswg.Par((double)value);
                    break;

                /* Length dependence */
                case _c.BSIM3_MOD_LCDSC:
                    BSIM3lcdsc.Par((double)value);
                    break;


                case _c.BSIM3_MOD_LCDSCB:
                    BSIM3lcdscb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCDSCD:
                    BSIM3lcdscd.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCIT:
                    BSIM3lcit.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LNFACTOR:
                    BSIM3lnfactor.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LXJ:
                    BSIM3lxj.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVSAT:
                    BSIM3lvsat.Par((double)value);
                    break;


                case _c.BSIM3_MOD_LA0:
                    BSIM3la0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LAGS:
                    BSIM3lags.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LA1:
                    BSIM3la1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LA2:
                    BSIM3la2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LAT:
                    BSIM3lat.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LKETA:
                    BSIM3lketa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LNSUB:
                    BSIM3lnsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LNPEAK:
                    BSIM3lnpeak.Par((double)value);
                    if (BSIM3lnpeak > 1.0e20)
                        BSIM3lnpeak.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_LNGATE:
                    BSIM3lngate.Par((double)value);
                    if (BSIM3lngate > 1.0e23)
                        BSIM3lngate.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_LGAMMA1:
                    BSIM3lgamma1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LGAMMA2:
                    BSIM3lgamma2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVBX:
                    BSIM3lvbx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVBM:
                    BSIM3lvbm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LXT:
                    BSIM3lxt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LK1:
                    BSIM3lk1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LKT1:
                    BSIM3lkt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LKT1L:
                    BSIM3lkt1l.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LKT2:
                    BSIM3lkt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LK2:
                    BSIM3lk2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LK3:
                    BSIM3lk3.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LK3B:
                    BSIM3lk3b.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LNLX:
                    BSIM3lnlx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LW0:
                    BSIM3lw0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT0:
                    BSIM3ldvt0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT1:
                    BSIM3ldvt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT2:
                    BSIM3ldvt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT0W:
                    BSIM3ldvt0w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT1W:
                    BSIM3ldvt1w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDVT2W:
                    BSIM3ldvt2w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDROUT:
                    BSIM3ldrout.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDSUB:
                    BSIM3ldsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVTH0:
                    BSIM3lvth0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUA:
                    BSIM3lua.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUA1:
                    BSIM3lua1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUB:
                    BSIM3lub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUB1:
                    BSIM3lub1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUC:
                    BSIM3luc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUC1:
                    BSIM3luc1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LU0:
                    BSIM3lu0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LUTE:
                    BSIM3lute.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVOFF:
                    BSIM3lvoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDELTA:
                    BSIM3ldelta.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LRDSW:
                    BSIM3lrdsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPRWB:
                    BSIM3lprwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPRWG:
                    BSIM3lprwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPRT:
                    BSIM3lprt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LETA0:
                    BSIM3leta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LETAB:
                    BSIM3letab.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPCLM:
                    BSIM3lpclm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPDIBL1:
                    BSIM3lpdibl1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPDIBL2:
                    BSIM3lpdibl2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPDIBLB:
                    BSIM3lpdiblb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPSCBE1:
                    BSIM3lpscbe1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPSCBE2:
                    BSIM3lpscbe2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LPVAG:
                    BSIM3lpvag.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LWR:
                    BSIM3lwr.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDWG:
                    BSIM3ldwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LDWB:
                    BSIM3ldwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LB0:
                    BSIM3lb0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LB1:
                    BSIM3lb1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LALPHA0:
                    BSIM3lalpha0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LALPHA1:
                    BSIM3lalpha1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LBETA0:
                    BSIM3lbeta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVFB:
                    BSIM3lvfb.Par((double)value);
                    break;

                case _c.BSIM3_MOD_LELM:
                    BSIM3lelm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCGSL:
                    BSIM3lcgsl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCGDL:
                    BSIM3lcgdl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCKAPPA:
                    BSIM3lckappa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCF:
                    BSIM3lcf.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCLC:
                    BSIM3lclc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LCLE:
                    BSIM3lcle.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVFBCV:
                    BSIM3lvfbcv.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LACDE:
                    BSIM3lacde.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LMOIN:
                    BSIM3lmoin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LNOFF:
                    BSIM3lnoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LVOFFCV:
                    BSIM3lvoffcv.Par((double)value);
                    break;

                /* Width dependence */
                case _c.BSIM3_MOD_WCDSC:
                    BSIM3wcdsc.Par((double)value);
                    break;


                case _c.BSIM3_MOD_WCDSCB:
                    BSIM3wcdscb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCDSCD:
                    BSIM3wcdscd.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCIT:
                    BSIM3wcit.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WNFACTOR:
                    BSIM3wnfactor.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WXJ:
                    BSIM3wxj.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVSAT:
                    BSIM3wvsat.Par((double)value);
                    break;


                case _c.BSIM3_MOD_WA0:
                    BSIM3wa0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WAGS:
                    BSIM3wags.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WA1:
                    BSIM3wa1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WA2:
                    BSIM3wa2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WAT:
                    BSIM3wat.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WKETA:
                    BSIM3wketa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WNSUB:
                    BSIM3wnsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WNPEAK:
                    BSIM3wnpeak.Par((double)value);
                    if (BSIM3wnpeak > 1.0e20)
                        BSIM3wnpeak.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_WNGATE:
                    BSIM3wngate.Par((double)value);
                    if (BSIM3wngate > 1.0e23)
                        BSIM3wngate.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_WGAMMA1:
                    BSIM3wgamma1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WGAMMA2:
                    BSIM3wgamma2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVBX:
                    BSIM3wvbx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVBM:
                    BSIM3wvbm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WXT:
                    BSIM3wxt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WK1:
                    BSIM3wk1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WKT1:
                    BSIM3wkt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WKT1L:
                    BSIM3wkt1l.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WKT2:
                    BSIM3wkt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WK2:
                    BSIM3wk2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WK3:
                    BSIM3wk3.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WK3B:
                    BSIM3wk3b.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WNLX:
                    BSIM3wnlx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WW0:
                    BSIM3ww0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT0:
                    BSIM3wdvt0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT1:
                    BSIM3wdvt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT2:
                    BSIM3wdvt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT0W:
                    BSIM3wdvt0w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT1W:
                    BSIM3wdvt1w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDVT2W:
                    BSIM3wdvt2w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDROUT:
                    BSIM3wdrout.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDSUB:
                    BSIM3wdsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVTH0:
                    BSIM3wvth0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUA:
                    BSIM3wua.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUA1:
                    BSIM3wua1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUB:
                    BSIM3wub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUB1:
                    BSIM3wub1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUC:
                    BSIM3wuc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUC1:
                    BSIM3wuc1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WU0:
                    BSIM3wu0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WUTE:
                    BSIM3wute.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVOFF:
                    BSIM3wvoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDELTA:
                    BSIM3wdelta.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WRDSW:
                    BSIM3wrdsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPRWB:
                    BSIM3wprwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPRWG:
                    BSIM3wprwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPRT:
                    BSIM3wprt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WETA0:
                    BSIM3weta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WETAB:
                    BSIM3wetab.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPCLM:
                    BSIM3wpclm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPDIBL1:
                    BSIM3wpdibl1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPDIBL2:
                    BSIM3wpdibl2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPDIBLB:
                    BSIM3wpdiblb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPSCBE1:
                    BSIM3wpscbe1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPSCBE2:
                    BSIM3wpscbe2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WPVAG:
                    BSIM3wpvag.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WWR:
                    BSIM3wwr.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDWG:
                    BSIM3wdwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WDWB:
                    BSIM3wdwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WB0:
                    BSIM3wb0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WB1:
                    BSIM3wb1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WALPHA0:
                    BSIM3walpha0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WALPHA1:
                    BSIM3walpha1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WBETA0:
                    BSIM3wbeta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVFB:
                    BSIM3wvfb.Par((double)value);
                    break;

                case _c.BSIM3_MOD_WELM:
                    BSIM3welm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCGSL:
                    BSIM3wcgsl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCGDL:
                    BSIM3wcgdl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCKAPPA:
                    BSIM3wckappa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCF:
                    BSIM3wcf.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCLC:
                    BSIM3wclc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WCLE:
                    BSIM3wcle.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVFBCV:
                    BSIM3wvfbcv.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WACDE:
                    BSIM3wacde.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WMOIN:
                    BSIM3wmoin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WNOFF:
                    BSIM3wnoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WVOFFCV:
                    BSIM3wvoffcv.Par((double)value);
                    break;

                /* Cross-term dependence */
                case _c.BSIM3_MOD_PCDSC:
                    BSIM3pcdsc.Par((double)value);
                    break;


                case _c.BSIM3_MOD_PCDSCB:
                    BSIM3pcdscb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCDSCD:
                    BSIM3pcdscd.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCIT:
                    BSIM3pcit.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PNFACTOR:
                    BSIM3pnfactor.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PXJ:
                    BSIM3pxj.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVSAT:
                    BSIM3pvsat.Par((double)value);
                    break;


                case _c.BSIM3_MOD_PA0:
                    BSIM3pa0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PAGS:
                    BSIM3pags.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PA1:
                    BSIM3pa1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PA2:
                    BSIM3pa2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PAT:
                    BSIM3pat.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PKETA:
                    BSIM3pketa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PNSUB:
                    BSIM3pnsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PNPEAK:
                    BSIM3pnpeak.Par((double)value);
                    if (BSIM3pnpeak > 1.0e20)
                        BSIM3pnpeak.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_PNGATE:
                    BSIM3pngate.Par((double)value);
                    if (BSIM3pngate > 1.0e23)
                        BSIM3pngate.Value *= 1.0e-6;
                    break;
                case _c.BSIM3_MOD_PGAMMA1:
                    BSIM3pgamma1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PGAMMA2:
                    BSIM3pgamma2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVBX:
                    BSIM3pvbx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVBM:
                    BSIM3pvbm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PXT:
                    BSIM3pxt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PK1:
                    BSIM3pk1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PKT1:
                    BSIM3pkt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PKT1L:
                    BSIM3pkt1l.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PKT2:
                    BSIM3pkt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PK2:
                    BSIM3pk2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PK3:
                    BSIM3pk3.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PK3B:
                    BSIM3pk3b.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PNLX:
                    BSIM3pnlx.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PW0:
                    BSIM3pw0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT0:
                    BSIM3pdvt0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT1:
                    BSIM3pdvt1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT2:
                    BSIM3pdvt2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT0W:
                    BSIM3pdvt0w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT1W:
                    BSIM3pdvt1w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDVT2W:
                    BSIM3pdvt2w.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDROUT:
                    BSIM3pdrout.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDSUB:
                    BSIM3pdsub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVTH0:
                    BSIM3pvth0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUA:
                    BSIM3pua.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUA1:
                    BSIM3pua1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUB:
                    BSIM3pub.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUB1:
                    BSIM3pub1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUC:
                    BSIM3puc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUC1:
                    BSIM3puc1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PU0:
                    BSIM3pu0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PUTE:
                    BSIM3pute.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVOFF:
                    BSIM3pvoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDELTA:
                    BSIM3pdelta.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PRDSW:
                    BSIM3prdsw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPRWB:
                    BSIM3pprwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPRWG:
                    BSIM3pprwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPRT:
                    BSIM3pprt.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PETA0:
                    BSIM3peta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PETAB:
                    BSIM3petab.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPCLM:
                    BSIM3ppclm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPDIBL1:
                    BSIM3ppdibl1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPDIBL2:
                    BSIM3ppdibl2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPDIBLB:
                    BSIM3ppdiblb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPSCBE1:
                    BSIM3ppscbe1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPSCBE2:
                    BSIM3ppscbe2.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PPVAG:
                    BSIM3ppvag.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PWR:
                    BSIM3pwr.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDWG:
                    BSIM3pdwg.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PDWB:
                    BSIM3pdwb.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PB0:
                    BSIM3pb0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PB1:
                    BSIM3pb1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PALPHA0:
                    BSIM3palpha0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PALPHA1:
                    BSIM3palpha1.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PBETA0:
                    BSIM3pbeta0.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVFB:
                    BSIM3pvfb.Par((double)value);
                    break;

                case _c.BSIM3_MOD_PELM:
                    BSIM3pelm.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCGSL:
                    BSIM3pcgsl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCGDL:
                    BSIM3pcgdl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCKAPPA:
                    BSIM3pckappa.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCF:
                    BSIM3pcf.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCLC:
                    BSIM3pclc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PCLE:
                    BSIM3pcle.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVFBCV:
                    BSIM3pvfbcv.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PACDE:
                    BSIM3pacde.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PMOIN:
                    BSIM3pmoin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PNOFF:
                    BSIM3pnoff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PVOFFCV:
                    BSIM3pvoffcv.Par((double)value);
                    break;

                case _c.BSIM3_MOD_TNOM:
                    BSIM3tnom.Par((double)value + Circuit.CONSTCtoK);
                    break;
                case _c.BSIM3_MOD_CGSO:
                    BSIM3cgso.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CGDO:
                    BSIM3cgdo.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CGBO:
                    BSIM3cgbo.Par((double)value);
                    break;
                case _c.BSIM3_MOD_XPART:
                    BSIM3xpart.Par((double)value);
                    break;
                case _c.BSIM3_MOD_RSH:
                    BSIM3sheetResistance.Par((double)value);
                    break;
                case _c.BSIM3_MOD_JS:
                    BSIM3jctSatCurDensity.Par((double)value);
                    break;
                case _c.BSIM3_MOD_JSW:
                    BSIM3jctSidewallSatCurDensity.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PB:
                    BSIM3bulkJctPotential.Par((double)value);
                    break;
                case _c.BSIM3_MOD_MJ:
                    BSIM3bulkJctBotGradingCoeff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PBSW:
                    BSIM3sidewallJctPotential.Par((double)value);
                    break;
                case _c.BSIM3_MOD_MJSW:
                    BSIM3bulkJctSideGradingCoeff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CJ:
                    BSIM3unitAreaJctCap.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CJSW:
                    BSIM3unitLengthSidewallJctCap.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NJ:
                    BSIM3jctEmissionCoeff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_PBSWG:
                    BSIM3GatesidewallJctPotential.Par((double)value);
                    break;
                case _c.BSIM3_MOD_MJSWG:
                    BSIM3bulkJctGateSideGradingCoeff.Par((double)value);
                    break;
                case _c.BSIM3_MOD_CJSWG:
                    BSIM3unitLengthGateSidewallJctCap.Par((double)value);
                    break;
                case _c.BSIM3_MOD_XTI:
                    BSIM3jctTempExponent.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LINT:
                    BSIM3Lint.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LL:
                    BSIM3Ll.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LLC:
                    BSIM3Llc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LLN:
                    BSIM3Lln.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LW:
                    BSIM3Lw.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LWC:
                    BSIM3Lwc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LWN:
                    BSIM3Lwn.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LWL:
                    BSIM3Lwl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LWLC:
                    BSIM3Lwlc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LMIN:
                    BSIM3Lmin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_LMAX:
                    BSIM3Lmax.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WINT:
                    BSIM3Wint.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WL:
                    BSIM3Wl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WLC:
                    BSIM3Wlc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WLN:
                    BSIM3Wln.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WW:
                    BSIM3Ww.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WWC:
                    BSIM3Wwc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WWN:
                    BSIM3Wwn.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WWL:
                    BSIM3Wwl.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WWLC:
                    BSIM3Wwlc.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WMIN:
                    BSIM3Wmin.Par((double)value);
                    break;
                case _c.BSIM3_MOD_WMAX:
                    BSIM3Wmax.Par((double)value);
                    break;

                case _c.BSIM3_MOD_NOIA:
                    BSIM3oxideTrapDensityA.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NOIB:
                    BSIM3oxideTrapDensityB.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NOIC:
                    BSIM3oxideTrapDensityC.Par((double)value);
                    break;
                case _c.BSIM3_MOD_EM:
                    BSIM3em.Par((double)value);
                    break;
                case _c.BSIM3_MOD_EF:
                    BSIM3ef.Par((double)value);
                    break;
                case _c.BSIM3_MOD_AF:
                    BSIM3af.Par((double)value);
                    break;
                case _c.BSIM3_MOD_KF:
                    BSIM3kf.Par((double)value);
                    break;
                case _c.BSIM3_MOD_NMOS:
                    BSIM3type.Par(1.0);
                    break;
                case _c.BSIM3_MOD_PMOS:
                    BSIM3type.Par(-1.0);
                    break;
                default:
                    throw new BadParameterException();
            }
        }

        /// <summary>
        /// Ask parameter
        /// </summary>
        protected override object Ask(int id, Circuit ckt = null)
        {
            switch ((_c)id)
            {
                case _c.BSIM3_MOD_MOBMOD:
                    return BSIM3mobMod.Value;
                case _c.BSIM3_MOD_PARAMCHK:
                    return BSIM3paramChk.Value;
                case _c.BSIM3_MOD_BINUNIT:
                    return BSIM3binUnit.Value;
                case _c.BSIM3_MOD_CAPMOD:
                    return BSIM3capMod.Value;
                case _c.BSIM3_MOD_NOIMOD:
                    return BSIM3noiMod.Value;
                case _c.BSIM3_MOD_VERSION:
                    return BSIM3version.Value;
                case _c.BSIM3_MOD_TOX:
                    return BSIM3tox.Value;
                case _c.BSIM3_MOD_TOXM:
                    return BSIM3toxm.Value;
                case _c.BSIM3_MOD_CDSC:
                    return BSIM3cdsc.Value;
                case _c.BSIM3_MOD_CDSCB:
                    return BSIM3cdscb.Value;

                case _c.BSIM3_MOD_CDSCD:
                    return BSIM3cdscd.Value;

                case _c.BSIM3_MOD_CIT:
                    return BSIM3cit.Value;
                case _c.BSIM3_MOD_NFACTOR:
                    return BSIM3nfactor.Value;
                case _c.BSIM3_MOD_XJ:
                    return BSIM3xj.Value;
                case _c.BSIM3_MOD_VSAT:
                    return BSIM3vsat.Value;
                case _c.BSIM3_MOD_AT:
                    return BSIM3at.Value;
                case _c.BSIM3_MOD_A0:
                    return BSIM3a0.Value;

                case _c.BSIM3_MOD_AGS:
                    return BSIM3ags.Value;

                case _c.BSIM3_MOD_A1:
                    return BSIM3a1.Value;
                case _c.BSIM3_MOD_A2:
                    return BSIM3a2.Value;
                case _c.BSIM3_MOD_KETA:
                    return BSIM3keta.Value;
                case _c.BSIM3_MOD_NSUB:
                    return BSIM3nsub.Value;
                case _c.BSIM3_MOD_NPEAK:
                    return BSIM3npeak.Value;
                case _c.BSIM3_MOD_NGATE:
                    return BSIM3ngate.Value;
                case _c.BSIM3_MOD_GAMMA1:
                    return BSIM3gamma1.Value;
                case _c.BSIM3_MOD_GAMMA2:
                    return BSIM3gamma2.Value;
                case _c.BSIM3_MOD_VBX:
                    return BSIM3vbx.Value;
                case _c.BSIM3_MOD_VBM:
                    return BSIM3vbm.Value;
                case _c.BSIM3_MOD_XT:
                    return BSIM3xt.Value;
                case _c.BSIM3_MOD_K1:
                    return BSIM3k1.Value;
                case _c.BSIM3_MOD_KT1:
                    return BSIM3kt1.Value;
                case _c.BSIM3_MOD_KT1L:
                    return BSIM3kt1l.Value;
                case _c.BSIM3_MOD_KT2:
                    return BSIM3kt2.Value;
                case _c.BSIM3_MOD_K2:
                    return BSIM3k2.Value;
                case _c.BSIM3_MOD_K3:
                    return BSIM3k3.Value;
                case _c.BSIM3_MOD_K3B:
                    return BSIM3k3b.Value;
                case _c.BSIM3_MOD_W0:
                    return BSIM3w0.Value;
                case _c.BSIM3_MOD_NLX:
                    return BSIM3nlx.Value;
                case _c.BSIM3_MOD_DVT0:
                    return BSIM3dvt0.Value;
                case _c.BSIM3_MOD_DVT1:
                    return BSIM3dvt1.Value;
                case _c.BSIM3_MOD_DVT2:
                    return BSIM3dvt2.Value;
                case _c.BSIM3_MOD_DVT0W:
                    return BSIM3dvt0w.Value;
                case _c.BSIM3_MOD_DVT1W:
                    return BSIM3dvt1w.Value;
                case _c.BSIM3_MOD_DVT2W:
                    return BSIM3dvt2w.Value;
                case _c.BSIM3_MOD_DROUT:
                    return BSIM3drout.Value;
                case _c.BSIM3_MOD_DSUB:
                    return BSIM3dsub.Value;
                case _c.BSIM3_MOD_VTH0:
                    return BSIM3vth0.Value;
                case _c.BSIM3_MOD_UA:
                    return BSIM3ua.Value;
                case _c.BSIM3_MOD_UA1:
                    return BSIM3ua1.Value;
                case _c.BSIM3_MOD_UB:
                    return BSIM3ub.Value;
                case _c.BSIM3_MOD_UB1:
                    return BSIM3ub1.Value;
                case _c.BSIM3_MOD_UC:
                    return BSIM3uc.Value;
                case _c.BSIM3_MOD_UC1:
                    return BSIM3uc1.Value;
                case _c.BSIM3_MOD_U0:
                    return BSIM3u0.Value;
                case _c.BSIM3_MOD_UTE:
                    return BSIM3ute.Value;
                case _c.BSIM3_MOD_VOFF:
                    return BSIM3voff.Value;
                case _c.BSIM3_MOD_DELTA:
                    return BSIM3delta.Value;
                case _c.BSIM3_MOD_RDSW:
                    return BSIM3rdsw.Value;
                case _c.BSIM3_MOD_PRWG:
                    return BSIM3prwg.Value;
                case _c.BSIM3_MOD_PRWB:
                    return BSIM3prwb.Value;
                case _c.BSIM3_MOD_PRT:
                    return BSIM3prt.Value;
                case _c.BSIM3_MOD_ETA0:
                    return BSIM3eta0.Value;
                case _c.BSIM3_MOD_ETAB:
                    return BSIM3etab.Value;
                case _c.BSIM3_MOD_PCLM:
                    return BSIM3pclm.Value;
                case _c.BSIM3_MOD_PDIBL1:
                    return BSIM3pdibl1.Value;
                case _c.BSIM3_MOD_PDIBL2:
                    return BSIM3pdibl2.Value;
                case _c.BSIM3_MOD_PDIBLB:
                    return BSIM3pdiblb.Value;
                case _c.BSIM3_MOD_PSCBE1:
                    return BSIM3pscbe1.Value;
                case _c.BSIM3_MOD_PSCBE2:
                    return BSIM3pscbe2.Value;
                case _c.BSIM3_MOD_PVAG:
                    return BSIM3pvag.Value;
                case _c.BSIM3_MOD_WR:
                    return BSIM3wr.Value;
                case _c.BSIM3_MOD_DWG:
                    return BSIM3dwg.Value;
                case _c.BSIM3_MOD_DWB:
                    return BSIM3dwb.Value;
                case _c.BSIM3_MOD_B0:
                    return BSIM3b0.Value;
                case _c.BSIM3_MOD_B1:
                    return BSIM3b1.Value;
                case _c.BSIM3_MOD_ALPHA0:
                    return BSIM3alpha0.Value;
                case _c.BSIM3_MOD_ALPHA1:
                    return BSIM3alpha1.Value;
                case _c.BSIM3_MOD_BETA0:
                    return BSIM3beta0.Value;
                case _c.BSIM3_MOD_IJTH:
                    return BSIM3ijth.Value;
                case _c.BSIM3_MOD_VFB:
                    return BSIM3vfb.Value;

                case _c.BSIM3_MOD_ELM:
                    return BSIM3elm.Value;
                case _c.BSIM3_MOD_CGSL:
                    return BSIM3cgsl.Value;
                case _c.BSIM3_MOD_CGDL:
                    return BSIM3cgdl.Value;
                case _c.BSIM3_MOD_CKAPPA:
                    return BSIM3ckappa.Value;
                case _c.BSIM3_MOD_CF:
                    return BSIM3cf.Value;
                case _c.BSIM3_MOD_CLC:
                    return BSIM3clc.Value;
                case _c.BSIM3_MOD_CLE:
                    return BSIM3cle.Value;
                case _c.BSIM3_MOD_DWC:
                    return BSIM3dwc.Value;
                case _c.BSIM3_MOD_DLC:
                    return BSIM3dlc.Value;
                case _c.BSIM3_MOD_VFBCV:
                    return BSIM3vfbcv.Value;
                case _c.BSIM3_MOD_ACDE:
                    return BSIM3acde.Value;
                case _c.BSIM3_MOD_MOIN:
                    return BSIM3moin.Value;
                case _c.BSIM3_MOD_NOFF:
                    return BSIM3noff.Value;
                case _c.BSIM3_MOD_VOFFCV:
                    return BSIM3voffcv.Value;
                case _c.BSIM3_MOD_TCJ:
                    return BSIM3tcj.Value;
                case _c.BSIM3_MOD_TPB:
                    return BSIM3tpb.Value;
                case _c.BSIM3_MOD_TCJSW:
                    return BSIM3tcjsw.Value;
                case _c.BSIM3_MOD_TPBSW:
                    return BSIM3tpbsw.Value;
                case _c.BSIM3_MOD_TCJSWG:
                    return BSIM3tcjswg.Value;
                case _c.BSIM3_MOD_TPBSWG:
                    return BSIM3tpbswg.Value;

                /* Length dependence */
                case _c.BSIM3_MOD_LCDSC:
                    return BSIM3lcdsc.Value;
                case _c.BSIM3_MOD_LCDSCB:
                    return BSIM3lcdscb.Value;
                case _c.BSIM3_MOD_LCDSCD:
                    return BSIM3lcdscd.Value;
                case _c.BSIM3_MOD_LCIT:
                    return BSIM3lcit.Value;
                case _c.BSIM3_MOD_LNFACTOR:
                    return BSIM3lnfactor.Value;
                case _c.BSIM3_MOD_LXJ:
                    return BSIM3lxj.Value;
                case _c.BSIM3_MOD_LVSAT:
                    return BSIM3lvsat.Value;
                case _c.BSIM3_MOD_LAT:
                    return BSIM3lat.Value;
                case _c.BSIM3_MOD_LA0:
                    return BSIM3la0.Value;
                case _c.BSIM3_MOD_LAGS:
                    return BSIM3lags.Value;
                case _c.BSIM3_MOD_LA1:
                    return BSIM3la1.Value;
                case _c.BSIM3_MOD_LA2:
                    return BSIM3la2.Value;
                case _c.BSIM3_MOD_LKETA:
                    return BSIM3lketa.Value;
                case _c.BSIM3_MOD_LNSUB:
                    return BSIM3lnsub.Value;
                case _c.BSIM3_MOD_LNPEAK:
                    return BSIM3lnpeak.Value;
                case _c.BSIM3_MOD_LNGATE:
                    return BSIM3lngate.Value;
                case _c.BSIM3_MOD_LGAMMA1:
                    return BSIM3lgamma1.Value;
                case _c.BSIM3_MOD_LGAMMA2:
                    return BSIM3lgamma2.Value;
                case _c.BSIM3_MOD_LVBX:
                    return BSIM3lvbx.Value;
                case _c.BSIM3_MOD_LVBM:
                    return BSIM3lvbm.Value;
                case _c.BSIM3_MOD_LXT:
                    return BSIM3lxt.Value;
                case _c.BSIM3_MOD_LK1:
                    return BSIM3lk1.Value;
                case _c.BSIM3_MOD_LKT1:
                    return BSIM3lkt1.Value;
                case _c.BSIM3_MOD_LKT1L:
                    return BSIM3lkt1l.Value;
                case _c.BSIM3_MOD_LKT2:
                    return BSIM3lkt2.Value;
                case _c.BSIM3_MOD_LK2:
                    return BSIM3lk2.Value;
                case _c.BSIM3_MOD_LK3:
                    return BSIM3lk3.Value;
                case _c.BSIM3_MOD_LK3B:
                    return BSIM3lk3b.Value;
                case _c.BSIM3_MOD_LW0:
                    return BSIM3lw0.Value;
                case _c.BSIM3_MOD_LNLX:
                    return BSIM3lnlx.Value;
                case _c.BSIM3_MOD_LDVT0:
                    return BSIM3ldvt0.Value;
                case _c.BSIM3_MOD_LDVT1:
                    return BSIM3ldvt1.Value;
                case _c.BSIM3_MOD_LDVT2:
                    return BSIM3ldvt2.Value;
                case _c.BSIM3_MOD_LDVT0W:
                    return BSIM3ldvt0w.Value;
                case _c.BSIM3_MOD_LDVT1W:
                    return BSIM3ldvt1w.Value;
                case _c.BSIM3_MOD_LDVT2W:
                    return BSIM3ldvt2w.Value;
                case _c.BSIM3_MOD_LDROUT:
                    return BSIM3ldrout.Value;
                case _c.BSIM3_MOD_LDSUB:
                    return BSIM3ldsub.Value;
                case _c.BSIM3_MOD_LVTH0:
                    return BSIM3lvth0.Value;
                case _c.BSIM3_MOD_LUA:
                    return BSIM3lua.Value;
                case _c.BSIM3_MOD_LUA1:
                    return BSIM3lua1.Value;
                case _c.BSIM3_MOD_LUB:
                    return BSIM3lub.Value;
                case _c.BSIM3_MOD_LUB1:
                    return BSIM3lub1.Value;
                case _c.BSIM3_MOD_LUC:
                    return BSIM3luc.Value;
                case _c.BSIM3_MOD_LUC1:
                    return BSIM3luc1.Value;
                case _c.BSIM3_MOD_LU0:
                    return BSIM3lu0.Value;
                case _c.BSIM3_MOD_LUTE:
                    return BSIM3lute.Value;
                case _c.BSIM3_MOD_LVOFF:
                    return BSIM3lvoff.Value;
                case _c.BSIM3_MOD_LDELTA:
                    return BSIM3ldelta.Value;
                case _c.BSIM3_MOD_LRDSW:
                    return BSIM3lrdsw.Value;
                case _c.BSIM3_MOD_LPRWB:
                    return BSIM3lprwb.Value;
                case _c.BSIM3_MOD_LPRWG:
                    return BSIM3lprwg.Value;
                case _c.BSIM3_MOD_LPRT:
                    return BSIM3lprt.Value;
                case _c.BSIM3_MOD_LETA0:
                    return BSIM3leta0.Value;
                case _c.BSIM3_MOD_LETAB:
                    return BSIM3letab.Value;
                case _c.BSIM3_MOD_LPCLM:
                    return BSIM3lpclm.Value;
                case _c.BSIM3_MOD_LPDIBL1:
                    return BSIM3lpdibl1.Value;
                case _c.BSIM3_MOD_LPDIBL2:
                    return BSIM3lpdibl2.Value;
                case _c.BSIM3_MOD_LPDIBLB:
                    return BSIM3lpdiblb.Value;
                case _c.BSIM3_MOD_LPSCBE1:
                    return BSIM3lpscbe1.Value;
                case _c.BSIM3_MOD_LPSCBE2:
                    return BSIM3lpscbe2.Value;
                case _c.BSIM3_MOD_LPVAG:
                    return BSIM3lpvag.Value;
                case _c.BSIM3_MOD_LWR:
                    return BSIM3lwr.Value;
                case _c.BSIM3_MOD_LDWG:
                    return BSIM3ldwg.Value;
                case _c.BSIM3_MOD_LDWB:
                    return BSIM3ldwb.Value;
                case _c.BSIM3_MOD_LB0:
                    return BSIM3lb0.Value;
                case _c.BSIM3_MOD_LB1:
                    return BSIM3lb1.Value;
                case _c.BSIM3_MOD_LALPHA0:
                    return BSIM3lalpha0.Value;
                case _c.BSIM3_MOD_LALPHA1:
                    return BSIM3lalpha1.Value;
                case _c.BSIM3_MOD_LBETA0:
                    return BSIM3lbeta0.Value;
                case _c.BSIM3_MOD_LVFB:
                    return BSIM3lvfb.Value;

                case _c.BSIM3_MOD_LELM:
                    return BSIM3lelm.Value;
                case _c.BSIM3_MOD_LCGSL:
                    return BSIM3lcgsl.Value;
                case _c.BSIM3_MOD_LCGDL:
                    return BSIM3lcgdl.Value;
                case _c.BSIM3_MOD_LCKAPPA:
                    return BSIM3lckappa.Value;
                case _c.BSIM3_MOD_LCF:
                    return BSIM3lcf.Value;
                case _c.BSIM3_MOD_LCLC:
                    return BSIM3lclc.Value;
                case _c.BSIM3_MOD_LCLE:
                    return BSIM3lcle.Value;
                case _c.BSIM3_MOD_LVFBCV:
                    return BSIM3lvfbcv.Value;
                case _c.BSIM3_MOD_LACDE:
                    return BSIM3lacde.Value;
                case _c.BSIM3_MOD_LMOIN:
                    return BSIM3lmoin.Value;
                case _c.BSIM3_MOD_LNOFF:
                    return BSIM3lnoff.Value;
                case _c.BSIM3_MOD_LVOFFCV:
                    return BSIM3lvoffcv.Value;

                /* Width dependence */
                case _c.BSIM3_MOD_WCDSC:
                    return BSIM3wcdsc.Value;
                case _c.BSIM3_MOD_WCDSCB:
                    return BSIM3wcdscb.Value;
                case _c.BSIM3_MOD_WCDSCD:
                    return BSIM3wcdscd.Value;
                case _c.BSIM3_MOD_WCIT:
                    return BSIM3wcit.Value;
                case _c.BSIM3_MOD_WNFACTOR:
                    return BSIM3wnfactor.Value;
                case _c.BSIM3_MOD_WXJ:
                    return BSIM3wxj.Value;
                case _c.BSIM3_MOD_WVSAT:
                    return BSIM3wvsat.Value;
                case _c.BSIM3_MOD_WAT:
                    return BSIM3wat.Value;
                case _c.BSIM3_MOD_WA0:
                    return BSIM3wa0.Value;
                case _c.BSIM3_MOD_WAGS:
                    return BSIM3wags.Value;
                case _c.BSIM3_MOD_WA1:
                    return BSIM3wa1.Value;
                case _c.BSIM3_MOD_WA2:
                    return BSIM3wa2.Value;
                case _c.BSIM3_MOD_WKETA:
                    return BSIM3wketa.Value;
                case _c.BSIM3_MOD_WNSUB:
                    return BSIM3wnsub.Value;
                case _c.BSIM3_MOD_WNPEAK:
                    return BSIM3wnpeak.Value;
                case _c.BSIM3_MOD_WNGATE:
                    return BSIM3wngate.Value;
                case _c.BSIM3_MOD_WGAMMA1:
                    return BSIM3wgamma1.Value;
                case _c.BSIM3_MOD_WGAMMA2:
                    return BSIM3wgamma2.Value;
                case _c.BSIM3_MOD_WVBX:
                    return BSIM3wvbx.Value;
                case _c.BSIM3_MOD_WVBM:
                    return BSIM3wvbm.Value;
                case _c.BSIM3_MOD_WXT:
                    return BSIM3wxt.Value;
                case _c.BSIM3_MOD_WK1:
                    return BSIM3wk1.Value;
                case _c.BSIM3_MOD_WKT1:
                    return BSIM3wkt1.Value;
                case _c.BSIM3_MOD_WKT1L:
                    return BSIM3wkt1l.Value;
                case _c.BSIM3_MOD_WKT2:
                    return BSIM3wkt2.Value;
                case _c.BSIM3_MOD_WK2:
                    return BSIM3wk2.Value;
                case _c.BSIM3_MOD_WK3:
                    return BSIM3wk3.Value;
                case _c.BSIM3_MOD_WK3B:
                    return BSIM3wk3b.Value;
                case _c.BSIM3_MOD_WW0:
                    return BSIM3ww0.Value;
                case _c.BSIM3_MOD_WNLX:
                    return BSIM3wnlx.Value;
                case _c.BSIM3_MOD_WDVT0:
                    return BSIM3wdvt0.Value;
                case _c.BSIM3_MOD_WDVT1:
                    return BSIM3wdvt1.Value;
                case _c.BSIM3_MOD_WDVT2:
                    return BSIM3wdvt2.Value;
                case _c.BSIM3_MOD_WDVT0W:
                    return BSIM3wdvt0w.Value;
                case _c.BSIM3_MOD_WDVT1W:
                    return BSIM3wdvt1w.Value;
                case _c.BSIM3_MOD_WDVT2W:
                    return BSIM3wdvt2w.Value;
                case _c.BSIM3_MOD_WDROUT:
                    return BSIM3wdrout.Value;
                case _c.BSIM3_MOD_WDSUB:
                    return BSIM3wdsub.Value;
                case _c.BSIM3_MOD_WVTH0:
                    return BSIM3wvth0.Value;
                case _c.BSIM3_MOD_WUA:
                    return BSIM3wua.Value;
                case _c.BSIM3_MOD_WUA1:
                    return BSIM3wua1.Value;
                case _c.BSIM3_MOD_WUB:
                    return BSIM3wub.Value;
                case _c.BSIM3_MOD_WUB1:
                    return BSIM3wub1.Value;
                case _c.BSIM3_MOD_WUC:
                    return BSIM3wuc.Value;
                case _c.BSIM3_MOD_WUC1:
                    return BSIM3wuc1.Value;
                case _c.BSIM3_MOD_WU0:
                    return BSIM3wu0.Value;
                case _c.BSIM3_MOD_WUTE:
                    return BSIM3wute.Value;
                case _c.BSIM3_MOD_WVOFF:
                    return BSIM3wvoff.Value;
                case _c.BSIM3_MOD_WDELTA:
                    return BSIM3wdelta.Value;
                case _c.BSIM3_MOD_WRDSW:
                    return BSIM3wrdsw.Value;
                case _c.BSIM3_MOD_WPRWB:
                    return BSIM3wprwb.Value;
                case _c.BSIM3_MOD_WPRWG:
                    return BSIM3wprwg.Value;
                case _c.BSIM3_MOD_WPRT:
                    return BSIM3wprt.Value;
                case _c.BSIM3_MOD_WETA0:
                    return BSIM3weta0.Value;
                case _c.BSIM3_MOD_WETAB:
                    return BSIM3wetab.Value;
                case _c.BSIM3_MOD_WPCLM:
                    return BSIM3wpclm.Value;
                case _c.BSIM3_MOD_WPDIBL1:
                    return BSIM3wpdibl1.Value;
                case _c.BSIM3_MOD_WPDIBL2:
                    return BSIM3wpdibl2.Value;
                case _c.BSIM3_MOD_WPDIBLB:
                    return BSIM3wpdiblb.Value;
                case _c.BSIM3_MOD_WPSCBE1:
                    return BSIM3wpscbe1.Value;
                case _c.BSIM3_MOD_WPSCBE2:
                    return BSIM3wpscbe2.Value;
                case _c.BSIM3_MOD_WPVAG:
                    return BSIM3wpvag.Value;
                case _c.BSIM3_MOD_WWR:
                    return BSIM3wwr.Value;
                case _c.BSIM3_MOD_WDWG:
                    return BSIM3wdwg.Value;
                case _c.BSIM3_MOD_WDWB:
                    return BSIM3wdwb.Value;
                case _c.BSIM3_MOD_WB0:
                    return BSIM3wb0.Value;
                case _c.BSIM3_MOD_WB1:
                    return BSIM3wb1.Value;
                case _c.BSIM3_MOD_WALPHA0:
                    return BSIM3walpha0.Value;
                case _c.BSIM3_MOD_WALPHA1:
                    return BSIM3walpha1.Value;
                case _c.BSIM3_MOD_WBETA0:
                    return BSIM3wbeta0.Value;
                case _c.BSIM3_MOD_WVFB:
                    return BSIM3wvfb.Value;

                case _c.BSIM3_MOD_WELM:
                    return BSIM3welm.Value;
                case _c.BSIM3_MOD_WCGSL:
                    return BSIM3wcgsl.Value;
                case _c.BSIM3_MOD_WCGDL:
                    return BSIM3wcgdl.Value;
                case _c.BSIM3_MOD_WCKAPPA:
                    return BSIM3wckappa.Value;
                case _c.BSIM3_MOD_WCF:
                    return BSIM3wcf.Value;
                case _c.BSIM3_MOD_WCLC:
                    return BSIM3wclc.Value;
                case _c.BSIM3_MOD_WCLE:
                    return BSIM3wcle.Value;
                case _c.BSIM3_MOD_WVFBCV:
                    return BSIM3wvfbcv.Value;
                case _c.BSIM3_MOD_WACDE:
                    return BSIM3wacde.Value;
                case _c.BSIM3_MOD_WMOIN:
                    return BSIM3wmoin.Value;
                case _c.BSIM3_MOD_WNOFF:
                    return BSIM3wnoff.Value;
                case _c.BSIM3_MOD_WVOFFCV:
                    return BSIM3wvoffcv.Value;

                /* Cross-term dependence */
                case _c.BSIM3_MOD_PCDSC:
                    return BSIM3pcdsc.Value;
                case _c.BSIM3_MOD_PCDSCB:
                    return BSIM3pcdscb.Value;
                case _c.BSIM3_MOD_PCDSCD:
                    return BSIM3pcdscd.Value;
                case _c.BSIM3_MOD_PCIT:
                    return BSIM3pcit.Value;
                case _c.BSIM3_MOD_PNFACTOR:
                    return BSIM3pnfactor.Value;
                case _c.BSIM3_MOD_PXJ:
                    return BSIM3pxj.Value;
                case _c.BSIM3_MOD_PVSAT:
                    return BSIM3pvsat.Value;
                case _c.BSIM3_MOD_PAT:
                    return BSIM3pat.Value;
                case _c.BSIM3_MOD_PA0:
                    return BSIM3pa0.Value;
                case _c.BSIM3_MOD_PAGS:
                    return BSIM3pags.Value;
                case _c.BSIM3_MOD_PA1:
                    return BSIM3pa1.Value;
                case _c.BSIM3_MOD_PA2:
                    return BSIM3pa2.Value;
                case _c.BSIM3_MOD_PKETA:
                    return BSIM3pketa.Value;
                case _c.BSIM3_MOD_PNSUB:
                    return BSIM3pnsub.Value;
                case _c.BSIM3_MOD_PNPEAK:
                    return BSIM3pnpeak.Value;
                case _c.BSIM3_MOD_PNGATE:
                    return BSIM3pngate.Value;
                case _c.BSIM3_MOD_PGAMMA1:
                    return BSIM3pgamma1.Value;
                case _c.BSIM3_MOD_PGAMMA2:
                    return BSIM3pgamma2.Value;
                case _c.BSIM3_MOD_PVBX:
                    return BSIM3pvbx.Value;
                case _c.BSIM3_MOD_PVBM:
                    return BSIM3pvbm.Value;
                case _c.BSIM3_MOD_PXT:
                    return BSIM3pxt.Value;
                case _c.BSIM3_MOD_PK1:
                    return BSIM3pk1.Value;
                case _c.BSIM3_MOD_PKT1:
                    return BSIM3pkt1.Value;
                case _c.BSIM3_MOD_PKT1L:
                    return BSIM3pkt1l.Value;
                case _c.BSIM3_MOD_PKT2:
                    return BSIM3pkt2.Value;
                case _c.BSIM3_MOD_PK2:
                    return BSIM3pk2.Value;
                case _c.BSIM3_MOD_PK3:
                    return BSIM3pk3.Value;
                case _c.BSIM3_MOD_PK3B:
                    return BSIM3pk3b.Value;
                case _c.BSIM3_MOD_PW0:
                    return BSIM3pw0.Value;
                case _c.BSIM3_MOD_PNLX:
                    return BSIM3pnlx.Value;
                case _c.BSIM3_MOD_PDVT0:
                    return BSIM3pdvt0.Value;
                case _c.BSIM3_MOD_PDVT1:
                    return BSIM3pdvt1.Value;
                case _c.BSIM3_MOD_PDVT2:
                    return BSIM3pdvt2.Value;
                case _c.BSIM3_MOD_PDVT0W:
                    return BSIM3pdvt0w.Value;
                case _c.BSIM3_MOD_PDVT1W:
                    return BSIM3pdvt1w.Value;
                case _c.BSIM3_MOD_PDVT2W:
                    return BSIM3pdvt2w.Value;
                case _c.BSIM3_MOD_PDROUT:
                    return BSIM3pdrout.Value;
                case _c.BSIM3_MOD_PDSUB:
                    return BSIM3pdsub.Value;
                case _c.BSIM3_MOD_PVTH0:
                    return BSIM3pvth0.Value;
                case _c.BSIM3_MOD_PUA:
                    return BSIM3pua.Value;
                case _c.BSIM3_MOD_PUA1:
                    return BSIM3pua1.Value;
                case _c.BSIM3_MOD_PUB:
                    return BSIM3pub.Value;
                case _c.BSIM3_MOD_PUB1:
                    return BSIM3pub1.Value;
                case _c.BSIM3_MOD_PUC:
                    return BSIM3puc.Value;
                case _c.BSIM3_MOD_PUC1:
                    return BSIM3puc1.Value;
                case _c.BSIM3_MOD_PU0:
                    return BSIM3pu0.Value;
                case _c.BSIM3_MOD_PUTE:
                    return BSIM3pute.Value;
                case _c.BSIM3_MOD_PVOFF:
                    return BSIM3pvoff.Value;
                case _c.BSIM3_MOD_PDELTA:
                    return BSIM3pdelta.Value;
                case _c.BSIM3_MOD_PRDSW:
                    return BSIM3prdsw.Value;
                case _c.BSIM3_MOD_PPRWB:
                    return BSIM3pprwb.Value;
                case _c.BSIM3_MOD_PPRWG:
                    return BSIM3pprwg.Value;
                case _c.BSIM3_MOD_PPRT:
                    return BSIM3pprt.Value;
                case _c.BSIM3_MOD_PETA0:
                    return BSIM3peta0.Value;
                case _c.BSIM3_MOD_PETAB:
                    return BSIM3petab.Value;
                case _c.BSIM3_MOD_PPCLM:
                    return BSIM3ppclm.Value;
                case _c.BSIM3_MOD_PPDIBL1:
                    return BSIM3ppdibl1.Value;
                case _c.BSIM3_MOD_PPDIBL2:
                    return BSIM3ppdibl2.Value;
                case _c.BSIM3_MOD_PPDIBLB:
                    return BSIM3ppdiblb.Value;
                case _c.BSIM3_MOD_PPSCBE1:
                    return BSIM3ppscbe1.Value;
                case _c.BSIM3_MOD_PPSCBE2:
                    return BSIM3ppscbe2.Value;
                case _c.BSIM3_MOD_PPVAG:
                    return BSIM3ppvag.Value;
                case _c.BSIM3_MOD_PWR:
                    return BSIM3pwr.Value;
                case _c.BSIM3_MOD_PDWG:
                    return BSIM3pdwg.Value;
                case _c.BSIM3_MOD_PDWB:
                    return BSIM3pdwb.Value;
                case _c.BSIM3_MOD_PB0:
                    return BSIM3pb0.Value;
                case _c.BSIM3_MOD_PB1:
                    return BSIM3pb1.Value;
                case _c.BSIM3_MOD_PALPHA0:
                    return BSIM3palpha0.Value;
                case _c.BSIM3_MOD_PALPHA1:
                    return BSIM3palpha1.Value;
                case _c.BSIM3_MOD_PBETA0:
                    return BSIM3pbeta0.Value;
                case _c.BSIM3_MOD_PVFB:
                    return BSIM3pvfb.Value;

                case _c.BSIM3_MOD_PELM:
                    return BSIM3pelm.Value;
                case _c.BSIM3_MOD_PCGSL:
                    return BSIM3pcgsl.Value;
                case _c.BSIM3_MOD_PCGDL:
                    return BSIM3pcgdl.Value;
                case _c.BSIM3_MOD_PCKAPPA:
                    return BSIM3pckappa.Value;
                case _c.BSIM3_MOD_PCF:
                    return BSIM3pcf.Value;
                case _c.BSIM3_MOD_PCLC:
                    return BSIM3pclc.Value;
                case _c.BSIM3_MOD_PCLE:
                    return BSIM3pcle.Value;
                case _c.BSIM3_MOD_PVFBCV:
                    return BSIM3pvfbcv.Value;
                case _c.BSIM3_MOD_PACDE:
                    return BSIM3pacde.Value;
                case _c.BSIM3_MOD_PMOIN:
                    return BSIM3pmoin.Value;
                case _c.BSIM3_MOD_PNOFF:
                    return BSIM3pnoff.Value;
                case _c.BSIM3_MOD_PVOFFCV:
                    return BSIM3pvoffcv.Value;

                case _c.BSIM3_MOD_TNOM:
                    return BSIM3tnom.Value - Circuit.CONSTCtoK;
                case _c.BSIM3_MOD_CGSO:
                    return BSIM3cgso.Value;
                case _c.BSIM3_MOD_CGDO:
                    return BSIM3cgdo.Value;
                case _c.BSIM3_MOD_CGBO:
                    return BSIM3cgbo.Value;
                case _c.BSIM3_MOD_XPART:
                    return BSIM3xpart.Value;
                case _c.BSIM3_MOD_RSH:
                    return BSIM3sheetResistance.Value;
                case _c.BSIM3_MOD_JS:
                    return BSIM3jctSatCurDensity.Value;
                case _c.BSIM3_MOD_JSW:
                    return BSIM3jctSidewallSatCurDensity.Value;
                case _c.BSIM3_MOD_PB:
                    return BSIM3bulkJctPotential.Value;
                case _c.BSIM3_MOD_MJ:
                    return BSIM3bulkJctBotGradingCoeff.Value;
                case _c.BSIM3_MOD_PBSW:
                    return BSIM3sidewallJctPotential.Value;
                case _c.BSIM3_MOD_MJSW:
                    return BSIM3bulkJctSideGradingCoeff.Value;
                case _c.BSIM3_MOD_CJ:
                    return BSIM3unitAreaJctCap.Value;
                case _c.BSIM3_MOD_CJSW:
                    return BSIM3unitLengthSidewallJctCap.Value;
                case _c.BSIM3_MOD_PBSWG:
                    return BSIM3GatesidewallJctPotential.Value;
                case _c.BSIM3_MOD_MJSWG:
                    return BSIM3bulkJctGateSideGradingCoeff.Value;
                case _c.BSIM3_MOD_CJSWG:
                    return BSIM3unitLengthGateSidewallJctCap.Value;
                case _c.BSIM3_MOD_NJ:
                    return BSIM3jctEmissionCoeff.Value;
                case _c.BSIM3_MOD_XTI:
                    return BSIM3jctTempExponent.Value;
                case _c.BSIM3_MOD_LINT:
                    return BSIM3Lint.Value;
                case _c.BSIM3_MOD_LL:
                    return BSIM3Ll.Value;
                case _c.BSIM3_MOD_LLC:
                    return BSIM3Llc.Value;
                case _c.BSIM3_MOD_LLN:
                    return BSIM3Lln.Value;
                case _c.BSIM3_MOD_LW:
                    return BSIM3Lw.Value;
                case _c.BSIM3_MOD_LWC:
                    return BSIM3Lwc.Value;
                case _c.BSIM3_MOD_LWN:
                    return BSIM3Lwn.Value;
                case _c.BSIM3_MOD_LWL:
                    return BSIM3Lwl.Value;
                case _c.BSIM3_MOD_LWLC:
                    return BSIM3Lwlc.Value;
                case _c.BSIM3_MOD_LMIN:
                    return BSIM3Lmin.Value;
                case _c.BSIM3_MOD_LMAX:
                    return BSIM3Lmax.Value;
                case _c.BSIM3_MOD_WINT:
                    return BSIM3Wint.Value;
                case _c.BSIM3_MOD_WL:
                    return BSIM3Wl.Value;
                case _c.BSIM3_MOD_WLC:
                    return BSIM3Wlc.Value;
                case _c.BSIM3_MOD_WLN:
                    return BSIM3Wln.Value;
                case _c.BSIM3_MOD_WW:
                    return BSIM3Ww.Value;
                case _c.BSIM3_MOD_WWC:
                    return BSIM3Wwc.Value;
                case _c.BSIM3_MOD_WWN:
                    return BSIM3Wwn.Value;
                case _c.BSIM3_MOD_WWL:
                    return BSIM3Wwl.Value;
                case _c.BSIM3_MOD_WWLC:
                    return BSIM3Wwlc.Value;
                case _c.BSIM3_MOD_WMIN:
                    return BSIM3Wmin.Value;
                case _c.BSIM3_MOD_WMAX:
                    return BSIM3Wmax.Value;
                case _c.BSIM3_MOD_NOIA:
                    return BSIM3oxideTrapDensityA.Value;
                case _c.BSIM3_MOD_NOIB:
                    return BSIM3oxideTrapDensityB.Value;
                case _c.BSIM3_MOD_NOIC:
                    return BSIM3oxideTrapDensityC.Value;
                case _c.BSIM3_MOD_EM:
                    return BSIM3em.Value;
                case _c.BSIM3_MOD_EF:
                    return BSIM3ef.Value;
                case _c.BSIM3_MOD_AF:
                    return BSIM3af.Value;
                case _c.BSIM3_MOD_KF:
                    return BSIM3kf.Value;
                default:
                    throw new BadParameterException();
            }
        }

        /// <summary>
        /// Setup the model
        /// This is the code of b3set.c without default intializations (see constructor)
        /// </summary>
        /// <param name="ckt"></param>
        public override void Setup(Circuit ckt)
        {
            // Check version number
            if (BSIM3version != "3.2.4")
                throw new CircuitException(String.Format("Model {0} requires model version 3.3.0, version {1} specified.", Name, BSIM3version));

            /* Default value Processing for BSIM3 MOSFET Models */
            BSIM3cox = 3.453133e-11 / BSIM3tox;
            if (!BSIM3toxm.Given)
                BSIM3toxm.Value = BSIM3tox;
            if (!BSIM3dsub.Given)
                BSIM3dsub.Value = BSIM3drout;
            if (!BSIM3vth0.Given)
                BSIM3vth0.Value = (BSIM3type == 1) ? 0.7 : -0.7;
            if (!BSIM3uc.Given)
                BSIM3uc.Value = (BSIM3mobMod == 3) ? -0.0465 : -0.0465e-9;
            if (!BSIM3uc1.Given)
                BSIM3uc1.Value = (BSIM3mobMod == 3) ? -0.056 : -0.056e-9;
            if (!BSIM3u0.Given)
                BSIM3u0.Value = (BSIM3type == 1) ? 0.067 : 0.025;

            /* Length dependence */

            /* Width dependence */

            /* Cross-term dependence */

            /* unit degree celcius */
            /* if (!BSIM3tnom.Given)
                BSIM3tnom = ckt->CKTnomTemp;
            else
                BSIM3tnom = BSIM3tnom + 273.15; */
            if (!BSIM3tnom.Given)
                BSIM3tnom.Value = ckt.Config.NominalTemperature;
            if (!BSIM3Llc.Given)
                BSIM3Llc.Value = BSIM3Ll;
            if (!BSIM3Lwc.Given)
                BSIM3Lwc.Value = BSIM3Lw;
            if (!BSIM3Lwlc.Given)
                BSIM3Lwlc.Value = BSIM3Lwl;
            if (!BSIM3Wlc.Given)
                BSIM3Wlc.Value = BSIM3Wl;
            if (!BSIM3Wwc.Given)
                BSIM3Wwc.Value = BSIM3Ww;
            if (!BSIM3Wwlc.Given)
                BSIM3Wwlc.Value = BSIM3Wwl;
            if (!BSIM3dwc.Given)
                BSIM3dwc.Value = BSIM3Wint;
            if (!BSIM3dlc.Given)
                BSIM3dlc.Value = BSIM3Lint;
            if (!BSIM3cf.Given)
                BSIM3cf.Value = 2.0 * EPSOX / PI * Math.Log(1.0 + 0.4e-6 / BSIM3tox);
            if (!BSIM3cgdo.Given)
            {
                if (BSIM3dlc.Given && (BSIM3dlc > 0.0))
                {
                    BSIM3cgdo.Value = BSIM3dlc * BSIM3cox - BSIM3cgdl;
                }
                else
                    BSIM3cgdo.Value = 0.6 * BSIM3xj * BSIM3cox;
            }
            if (!BSIM3cgso.Given)
            {
                if (BSIM3dlc.Given && (BSIM3dlc > 0.0))
                {
                    BSIM3cgso.Value = BSIM3dlc * BSIM3cox - BSIM3cgsl;
                }
                else
                    BSIM3cgso.Value = 0.6 * BSIM3xj * BSIM3cox;
            }

            if (!BSIM3cgbo.Given)
            {
                BSIM3cgbo.Value = 2.0 * BSIM3dwc * BSIM3cox;
            }
            if (!BSIM3unitLengthGateSidewallJctCap.Given)
                BSIM3unitLengthGateSidewallJctCap.Value = BSIM3unitLengthSidewallJctCap;
            if (!BSIM3GatesidewallJctPotential.Given)
                BSIM3GatesidewallJctPotential.Value = BSIM3sidewallJctPotential;
            if (!BSIM3bulkJctGateSideGradingCoeff.Given)
                BSIM3bulkJctGateSideGradingCoeff.Value = BSIM3bulkJctSideGradingCoeff;
            if (!BSIM3oxideTrapDensityA.Given)
            {
                if (BSIM3type == 1)
                    BSIM3oxideTrapDensityA.Value = 1e20;
                else
                    BSIM3oxideTrapDensityA.Value = 9.9e18;
            }
            if (!BSIM3oxideTrapDensityB.Given)
            {
                if (BSIM3type == 1)
                    BSIM3oxideTrapDensityB.Value = 5e4;
                else
                    BSIM3oxideTrapDensityB.Value = 2.4e3;
            }
            if (!BSIM3oxideTrapDensityC.Given)
            {
                if (BSIM3type == 1)
                    BSIM3oxideTrapDensityC.Value = -1.4e-12;
                else
                    BSIM3oxideTrapDensityC.Value = 1.4e-12;
            }
            base.Setup(ckt);
        }

        /// <summary>
        /// Model parameters used for the temperature-dependent calculations of instances
        /// </summary>
        public struct BSIM3TempParameters
        {
            public double TRatio, Vtm0, ni;
        }

        /// <summary>
        /// Do temperature-dependent calculations
        /// </summary>
        /// <param name="ckt"></param>
        public override void Temperature(Circuit ckt)
        {
            double Eg, Eg0, T0, T1;
            double delTemp, Temp, Tnom;

            BSIM3TempParameters tp = new BSIM3TempParameters();

            Temp = ckt.Config.Temperature;
            if (BSIM3bulkJctPotential < 0.1)
            {
                BSIM3bulkJctPotential.Value = 0.1;
                CircuitWarning.Warning(this, "Given pb is less than 0.1. Pb is set to 0.1.\n");
            }
            if (BSIM3sidewallJctPotential < 0.1)
            {
                BSIM3sidewallJctPotential.Value = 0.1;
                CircuitWarning.Warning(this, "Given pbsw is less than 0.1. Pbsw is set to 0.1.\n");
            }
            if (BSIM3GatesidewallJctPotential < 0.1)
            {
                BSIM3GatesidewallJctPotential.Value = 0.1;
                CircuitWarning.Warning(this, "Given pbswg is less than 0.1. Pbswg is set to 0.1.\n");
            }

            Tnom = BSIM3tnom;
            tp.TRatio = Temp / Tnom;

            BSIM3vcrit = Circuit.CONSTvt0 * Math.Log(Circuit.CONSTvt0 / (Circuit.CONSTroot2 * 1.0e-14));
            BSIM3factor1 = Math.Sqrt(EPSSI / EPSOX * BSIM3tox);

            tp.Vtm0 = KboQ * Tnom;
            Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0);
            tp.ni = 1.45e10 * (Tnom / 300.15) * Math.Sqrt(Tnom / 300.15) * Math.Exp(21.5565981 - Eg0 / (2.0 * tp.Vtm0));

            BSIM3vtm = KboQ * Temp;
            Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0);
            if (Temp != Tnom)
            {
                T0 = Eg0 / tp.Vtm0 - Eg / BSIM3vtm + BSIM3jctTempExponent
                     * Math.Log(Temp / Tnom);
                T1 = Math.Exp(T0 / BSIM3jctEmissionCoeff);
                BSIM3jctTempSatCurDensity = BSIM3jctSatCurDensity
                                                   * T1;
                BSIM3jctSidewallTempSatCurDensity
                = BSIM3jctSidewallSatCurDensity * T1;
            }
            else
            {
                BSIM3jctTempSatCurDensity = BSIM3jctSatCurDensity;
                BSIM3jctSidewallTempSatCurDensity = BSIM3jctSidewallSatCurDensity;
            }

            if (BSIM3jctTempSatCurDensity < 0.0)
                BSIM3jctTempSatCurDensity = 0.0;
            if (BSIM3jctSidewallTempSatCurDensity < 0.0)
                BSIM3jctSidewallTempSatCurDensity = 0.0;

            /* Temperature dependence of D/B and S/B diode capacitance begins */
            delTemp = ckt.Config.Temperature - BSIM3tnom;
            T0 = BSIM3tcj * delTemp;
            if (T0 >= -1.0)
            {
                BSIM3unitAreaTempJctCap = BSIM3unitAreaJctCap * (1.0 + T0);
            }
            else if (BSIM3unitAreaJctCap > 0.0)
            {
                BSIM3unitAreaTempJctCap = 0.0;
                CircuitWarning.Warning(this, "Temperature effect has caused cj to be negative. Cj is clamped to zero.\n");
            }
            T0 = BSIM3tcjsw * delTemp;
            if (T0 >= -1.0)
                BSIM3unitLengthSidewallTempJctCap = BSIM3unitLengthSidewallJctCap * (1.0 + T0);
            else if (BSIM3unitLengthSidewallJctCap > 0.0)
            {
                BSIM3unitLengthSidewallTempJctCap = 0.0;
                CircuitWarning.Warning(this, "Temperature effect has caused cjsw to be negative. Cjsw is clamped to zero.\n");
            }
            T0 = BSIM3tcjswg * delTemp;
            if (T0 >= -1.0)
                BSIM3unitLengthGateSidewallTempJctCap = BSIM3unitLengthGateSidewallJctCap * (1.0 + T0);
            else if (BSIM3unitLengthGateSidewallJctCap > 0.0)
            {
                BSIM3unitLengthGateSidewallTempJctCap = 0.0;
                CircuitWarning.Warning(this, "Temperature effect has caused cjswg to be negative. Cjswg is clamped to zero.\n");
            }

            BSIM3PhiB = BSIM3bulkJctPotential
                               - BSIM3tpb * delTemp;
            if (BSIM3PhiB < 0.01)
            {
                BSIM3PhiB = 0.01;
                CircuitWarning.Warning(this, "Temperature effect has caused pb to be less than 0.01. Pb is clamped to 0.01.\n");
            }
            BSIM3PhiBSW = BSIM3sidewallJctPotential - BSIM3tpbsw * delTemp;
            if (BSIM3PhiBSW <= 0.01)
            {
                BSIM3PhiBSW = 0.01;
                CircuitWarning.Warning(this, "Temperature effect has caused pbsw to be less than 0.01. Pbsw is clamped to 0.01.\n");
            }
            BSIM3PhiBSWG = BSIM3GatesidewallJctPotential - BSIM3tpbswg * delTemp;
            if (BSIM3PhiBSWG <= 0.01)
            {
                BSIM3PhiBSWG = 0.01;
                CircuitWarning.Warning(this, "Temperature effect has caused pbswg to be less than 0.01. Pbswg is clamped to 0.01.\n");
            }
            /* End of junction capacitance */
            foreach (var inst in Instances)
                inst.Temperature(ckt, this, tp);
        }

        /// <summary>
        /// Model parameters used for loading instances
        /// </summary>
        public struct BSIM3LoadParameters
        {
            public double ScalingFactor;
            public bool ChargeComputationNeeded;
        }

        /// <summary>
        /// Load the Mosfet
        /// </summary>
        /// <param name="ckt"></param>
        public override void Load(Circuit ckt)
        {
            // Calculate model parameters
            BSIM3LoadParameters lp = new BSIM3LoadParameters();
            lp.ScalingFactor = 1.0e-9;
            lp.ChargeComputationNeeded =
                (((ckt.Mode & (Circuit.Modes.Ac | Circuit.Modes.Tran | Circuit.Modes.InitSmSig)) != 0) ||
                (((ckt.Mode & Circuit.Modes.TranOp) != 0) && ((ckt.Mode & Circuit.Modes.Uic) != 0)))
                ? true : false;

            foreach (var inst in Instances)
                inst.Load(ckt, this, lp);
        }
    }
}
